|
|
|
|
|
|
C********e 发帖数: 1 | 1 在mybatis和spring整合时:
在spring中创建mapper接口生成代理对象时,一个mapper需对应配置一个bean,将非常
繁琐。为了简化配置,可以使用MapperScannerConfigure,这样只需传入mapper所在包
路径,通过扫描包即可获取所有的mapper,并将扫描到的所有mapper接口自动生成代理
对象,并在spring中注入。
配置方法为:
一般数据源为单例时,不会报错,因为MapperScannerConfigurer中会自动配置加载为
单例模式的sqlSessionFactory,而当不是单例时,就需要去加入sqlSessionFactory的
属性了,好奇心驱使,即是是单例模式我也加入了sqlSessionFactory我开始用的是这
种:
然后很悲剧地报错了:
org.springframework.beans.factory.BeanCreationException: Error creating bean
with name 'org.mybatis.spring.mapper.MapperScannerConfigurer#0' defined in
class path resource [spring/applicationContext.xml]: Initialization of bean
failed; nested exception is org.springframework.beans.
ConversionNotSupportedException: Failed to convert property value of type '
java.lang.String' to required type 'org.apache.ibatis.session.
SqlSessionFactory' for property 'sqlSessionFactory'; nested exception is
java.lang.IllegalStateException: Cannot convert value of type [java.lang.
String] to required type [org.apache.ibatis.session.SqlSessionFactory] for
property 'sqlSessionFactory': no matching editors or conversion strategy
found
经过排查,并去各处用各种方法寻找答案,发现出现这种情况的原因是:
配置MapperScannerConfigurer所在的bean在加载配置的sqlSessionFactory之前加载,
即当扫描到并生成mapper的实例化对象时,sqlSession工厂尚未加载成功,因此出现错
误。
可以将它的name改为:sqlSessionFactoryBeanName即可解决问题。即:
|
|
|
|
|
|