按评价排序 | 显示最新答案 | 回页面顶部共有10个答案 我要回答»
-
ruben 回答于 2011-11-19 21:38
我也遇到过这个问题,但不清楚是否和你的情况一样,不过导致的原因应该差不多。
==================================================
在spring里使用org.mybatis.spring.mapper.MapperScannerConfigurer 进行自动扫描的时候,设置了sqlSessionFactory 的话,可能会导致PropertyPlaceholderConfigurer失效,也就是用${jdbc.username}这样之类的表达式,将无法获取到properties文件里的内容。 导致这一原因是因为,MapperScannerConigurer实际是在解析加载bean定义阶段的,这个时候要是设置sqlSessionFactory的话,会导致提前初始化一些类,这个时候,PropertyPlaceholderConfigurer还没来得及替换定义中的变量,导致把表达式当作字符串复制了。 但如果不设置sqlSessionFactory 属性的话,就必须要保证sessionFactory在spring中名称一定要是sqlSessionFactory ,否则就无法自动注入。又或者直接定义 MapperFactoryBean ,再或者放弃自动代理接口方式。
-
-
-
hyanqing 回答于 2012-03-06 20:10
就是这个org.mybatis.spring.mapper.MapperScannerConfigurer中配置的bean下有属性sqlSessionFactory,如果配置了,就去掉这个属性,变成如下:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property value="com.hyq.showcase.mapper,com.hyq.common.core.mapper" name="basePackage"/>
</bean>
--- 共有 2 条评论 --- -
icanfly 回答于 2012-07-25 13:31
楼上的解决方案比较一般,在3.1.1版本中配置的时候提供了以下:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.xxxx.dal.mapper" />
<property name="sqlSessionFactoryBeanName" value="ysSqlSessionFactory" />
<!-- <property name="sqlSessionFactory" ref="ysSqlSessionFactory"></property> -->
</bean>
改用sqlSessionFactoryBeanName注入就没有问题(不要使用sqlSessionFactory属性注入,使用sqlSessionFactoryBeanName注入),因为这时不会立即初始化sqlSessionFactory,传入的只是名字,非bean,所以不会引发提前初始化问题。。
以上供参考!
-
常育新 回答于 2012-11-09 22:41
01
<bean id=
"sqlSessionFactory"
class
=
"org.mybatis.spring.SqlSessionFactoryBean"
>
02
<property name=
"configLocation"
value=
"classpath:mybatis-config.xml"
/>
03
<property name=
"dataSource"
ref=
"dataSource"
/>
04
</bean>
05
06
<!-- mapper自动扫描 -->
07
<bean
class
=
"org.mybatis.spring.mapper.MapperScannerConfigurer"
>
08
<property name=
"basePackage"
value=
"com.xxx.xxx"
/>
09
<property name=
"annotationClass"
value=
"org.springframework.stereotype.Repository"
/>
10
</bean>
-
常育新 回答于 2012-11-09 23:21
引用来自“icanfly”的答案
楼上的解决方案比较一般,在3.1.1版本中配置的时候提供了以下:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.xxxx.dal.mapper" />
<property name="sqlSessionFactoryBeanName" value="ysSqlSessionFactory" />
<!-- <property name="sqlSessionFactory" ref="ysSqlSessionFactory"></property> -->
</bean>
改用sqlSessionFactoryBeanName注入就没有问题(不要使用sqlSessionFactory属性注入,使用sqlSessionFactoryBeanName注入),因为这时不会立即初始化sqlSessionFactory,传入的只是名字,非bean,所以不会引发提前初始化问题。。
以上供参考!
按照这个方法,解决问题了,多谢!~ -
-
xuwei 回答于 2012-11-23 21:41
01
<
bean
id
=
"sqlSessionFactory"
class
=
"org.mybatis.spring.SqlSessionFactoryBean"
>
02
<
property
name
=
"dataSource"
ref
=
"dataSource"
/>
03
<!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 -->
04
<
property
name
=
"typeAliasesPackage"
value
=
"com.hzbank.erp.mybatis.entity"
/>
05
<!-- 显式指定Mapper文件位置 -->
06
<
property
name
=
"mapperLocations"
value
=
"classpath*:mybatis/TUserMapper.xml"
/>
07
</
bean
>
08
09
<!-- 扫描basePackage下所有以@MyBatisRepository标识的 接口 -->
10
<
bean
class
=
"org.mybatis.spring.mapper.MapperScannerConfigurer"
>
11
<
property
name
=
"sqlSessionFactoryBeanName"
value
=
"sqlSessionFactory"
/>
12
<
property
name
=
"basePackage"
value
=
"com.hzbank.erp.mybatis"
/>
13
<
property
name
=
"annotationClass"
value
=
"com.hzbank.erp.mybatis.interf.MyBatisRepository"
/>
14
15
</
bean
>