Mybatis中Manual close is not allowed over a Spring managed SqlSession

Manual close is not allowed over a Spring managed SqlSession

f93953950bdf1b87e59c364b47a3742b734.jpg

在Spring托管的SqlSession上不允许手动关闭

在项目中出现的警告提示!!!

:::::::正确回答:::::::

SqlSessionTemplate你不可以手动关闭。SqlSessionTemplate是一个代理类,内部他会为每次请求创建线程安全的sqlsession,并与Spring进行集成.在你的方法调用完毕以后他会自动关闭的。

-----------------------------------方法一----------------------------------------------------

解决方法很简单,在spring中配置SqlSessionTemplate为:

<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate" scope="prototype"> 
        <constructor-arg index="0" ref="sqlSessionFactory" /> 

    </bean> 

注意其prototype,

这样你的Dao使用以下配置就没有问题:

@Resource 
protected SqlSessionTemplate sqlSessionTemplate;

-----------------------------------方法二----------------------------------------------------

你这么配置是有问题的,mybatis 中的sqlSession本身是一个快速创建和销毁的类,在与spring的配合中最好不要直接操纵sqlSession,让spring自动管理。

在配置文件中的 sqlSession 段是不需要的,

在dao中不要直接配置sqlSession ,可以使用SqlSessionDaoSupport 并且配置为@Repository 就可以了。

我的项目中是这么配置的:

5d2b8784cc3af578267b961b5c5415f5d40.jpg

在ServiceImpl中我使用了SqlSessionTemplate

0b6c7f397041e63597c2a15a66fd1534b6f.jpg

根据上面仁兄的回答,我是不需要使用SqlSessionTemplate的,直接让spring给我进行管理即可!!!

因此我取消了关于SqlSessionTemplate的配置!并且进行单元测试,发现测试成功,并没有报错!所以可见

090702ae991b90a1dd8d65bc283476ecb42.jpg

 

总结:

    在与spring的配合中最好不要直接操纵sqlSession,直接让mapper与mapper.xml对应使用底层spring去操作sqlSession即可!!!

借鉴:

https://www.oschina.net/question/97503_131975?sort=time

转载于:https://my.oschina.net/u/3725191/blog/3019101

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值