在Spring託管的SqlSession上不容許手動關閉spring
在項目中出現的警告提示!!!sql
:::::::正確回答:::::::安全
SqlSessionTemplate你不能夠手動關閉。SqlSessionTemplate是一個代理類,內部他會爲每次請求建立線程安全的sqlsession,並與Spring進行集成.在你的方法調用完畢之後他會自動關閉的。session
-----------------------------------方法一----------------------------------------------------mybatis
解決方法很簡單,在spring中配置SqlSessionTemplate爲:app
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate" scope="prototype">
<constructor-arg index="0" ref="sqlSessionFactory" /> 單元測試
</bean> 測試
注意其prototype,spa
這樣你的Dao使用如下配置就沒有問題:.net
@Resource
protected SqlSessionTemplate sqlSessionTemplate;
-----------------------------------方法二----------------------------------------------------
你這麼配置是有問題的,mybatis 中的sqlSession自己是一個快速建立和銷燬的類,在與spring的配合中最好不要直接操縱sqlSession,讓spring自動管理。
在配置文件中的 sqlSession 段是不須要的,
在dao中不要直接配置sqlSession ,能夠使用SqlSessionDaoSupport 而且配置爲@Repository 就能夠了。
個人項目中是這麼配置的:
在ServiceImpl中我使用了SqlSessionTemplate
根據上面仁兄的回答,我是不須要使用SqlSessionTemplate的,直接讓spring給我進行管理便可!!!
所以我取消了關於SqlSessionTemplate的配置!而且進行單元測試,發現測試成功,並無報錯!因此可見
總結:
在與spring的配合中最好不要直接操縱sqlSession,直接讓mapper與mapper.xml對應使用底層spring去操做sqlSession便可!!!
借鑑:
https://www.oschina.net/question/97503_131975?sort=time