欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

'org.mybatis.spring.mapper.MapperScannerConfigurer' to required type 'xxx' for property 'XX'

程序员文章站 2022-07-15 13:13:04
...

2019/4/8
问题描述
在bean中通过通过org.mybatis.spring.mapper.MapperScannerConfigurer进行mapper的批量配置,代码如下

<bean id="studentMapper" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
	<!-- 制定批量产生那个包中的mapper文件 -->
	<property name="basePackage" value="mapper"></property>
</bean>

<bean id="studentService" class="service.Impl.StudentServiceImpl">
	<property name="studentMapper" ref="studentMapper"></property>
</bean>

结果运行测试类的时候报如下错:

'org.mybatis.spring.mapper.MapperScannerConfigurer' to required type 'mapper.StudentMapper' for property 'studentMapper'

解决思路
由于该方式是通过批量配置mapper文件,所以第一个 bean id="studentMapper"显然有问题,因为这里id代表配置多个mapper文件,然后第二bean又使用了ref=studentMapper。矛盾在于,第一个id表示批量配置mapper的一个id,第二个bean表示某一个mapper文件的ref,这就产生了冲突。

解决方法
1.把第一bean id 的值改成"mappers",表示批量配置
2.把第二个bean的ref值改成对应mapper的java文件名。(批量产生Mapper在SpringIOC中的id值默认就是接口名)

修改后代码如下

<bean id="mappers" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
		<!-- 制定批量产生那个包中的mapper文件 -->
		<property name="basePackage" value="mapper"></property>
	</bean>
	
	<bean id="studentService" class="service.Impl.StudentServiceImpl">
		<property name="studentMapper" ref="studentMapper"></property>
	</bean>