1. 报错原因
使用MapperScannerConfigurer扫描对应的mapper接口,帮我把mapper放入spring容器中,但是我的mapper映射文件并没有关联到sessionFactory中。
加载mybatis核心配置文件时,
其中的环境,数据源,mapper标签会失效,不能加载mapper映射文件。
<!-- 配置sessionFactory -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 加载 mybatis核心配置文件-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
<!-- 将mapper接口给spring容器管理 -->
<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.bitqian.dao"/>
</bean>
2. 解决
需要在SqlSessionFactoryBean中加载mapper文件
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 加载 mybatis核心配置文件-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<!-- 加载mapper 映射文件-->
<property name="mapperLocations" value="classpath:cn/bitqian/mapper/*"/>
</bean>
3. 说明
- 这只是我的问题,没加载mapper映射文件
- 关于这个文件我也搞了好久
- 这个问题的本质是找不到mapper接口对应的方法,mapper接口中的方法和mapper配置文件中的statement标签映射失败,注意mapper映射文件namespace与mapper接口全类名是否一致,statement中的id与接口方法名是否一致,以及parameterType和方法参数,resultType/resultMap与返回值类型是否一致!