目录
问题
使用了mybatis的generator自动成成了反向工程代码,dao,model,以及映射xml文件。在调用接口时一直报如下错误
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.ccb.market.dao.UserMapper.selectByPrimaryKey
at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:225) ~[mybatis-3.4.5.jar:3.4.5]
at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:48) ~[mybatis-3.4.5.jar:3.4.5]
at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:65) ~
分析
根据报错内容Invalid bound statement (not found): com.ccb.market.dao.UserMapper.selectByPrimaryKey初步分析程序在运行到dao层是没有找到对应的xml映射文件,那没找到的原因是什么呢,经过一波搜索。得出结论xml文件在程序运行时没有扫描到,也就是说三种原因
1、编译文件中没有这个xml文件
2、dao层的文件与映射文件xml名称不匹配
3、路径没有匹配上。
最后经过一番尝试定位出是applicaition.protites中缺少如下配置。这个配置很重要,这个配置很重要,这个配置很重要
#指定mapper.xml的位置,如果mapper.xml和接口类在一个包下就不需要指定了
mybatis.mapper-locations=classpath:com/ccb/market/mapper/*.xml
总结
springboot在集成mybatis时候依次满足如下两个条件;
一、两个注解
1、注解@SpringBootApplication
//配置要扫描的包目录
@SpringBootApplication(scanBasePackages = "com.ccb.market")
相当于
<!-- 自动扫描controller包下的所有类,使其认为spring mvc的控制器 -->
<context:component-scan base-package="com.ccb.market" />
2、注解@MapperScan("com.ccb.market.dao")//配置要扫描dao层的目录
//配置要扫描dao层的目录
@MapperScan("com.ccb.market.dao")
相当于
<!-- myBatis文件 -->
<bean id="sqlSessionFactory" class="core.common.springmvc.PackagesSqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:config/mybatis-config.xml"/>
<property name="mapperLocations" value="classpath:com/ccb/market/mapper/*.xml" />
<property name="typeAliasesPackage" value="com.**.model" />
</bean>
二、一个配置properties
#指定mapper.xml的位置,如果mapper.xml和接口类在一个包下就不需要指定了
mybatis.mapper-locations=classpath:com/ccb/market/mapper/*.xml