二十五、当mybatis与spring整合的时候的一个配置细节

本文介绍MyBatis与Spring框架整合过程中遇到的问题及其解决办法。重点讲述了如何正确配置SQLSessionFactory,避免因属性未被及时替换而导致的初始化失败。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

            mybatis与spring整合:sqlmapconfig,连接池,map.xml....整合出别名留在原地,其他的放到applicationcontext-dao.xml

 

 

1、Spring-mybatis整合 获取properties 创建SQLSessionFactory失败

 

代码:

连接池

<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test" />
<property name="username" value="root" />
<property name="password" value="root" />
</bean>

工厂

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="/mybatis.xml" />
</bean>

  map.xml 
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--注意:只用当传入的值是bean的时候,采用ref,否则就用value-->
        <property name="basePackage" value="cn.itcast.ssm.mapper"/>
        <property name="sqlSessionFactoryBeanName"    错误 ref="sqlSessionFactory"/>
    </bean>

测试类:

 

输出结果:

如果想加载properties 配置文件的方式读取 dataSource Bean:

 

这时,你会发现没有问题;会得到数据库连接,但是加上SQLSessionFactory的话就会报错:

报错信息:

 

提示很明显:创建初始化的SQLSessionFactory失败,因为dataSource加载失败!!什么原因呢?

找了好久终于发现:

 

MapperScannerConigurer实际是在解析加载bean定义阶段的,这个时候要是设置sqlSessionFactory的话,会导致提前初始化一些类,这个时候,PropertyPlaceholderConfigurer还没来得及替换定义中的变量,导致把表达式当作字符串复制了,解决的办法如下:

 

修改

<property name="sqlSessionFactoryBeanName" 错误 ref="sqlSessionFactory"/>

为<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>

原理:使用sqlSessionFactoryBeanName注入,不会立即初始化sqlSessionFactory, 所以不会引发提前初始化问题。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值