Mybatis中Manual close is not allowed over a Spring managed SqlSession
Manual close is not allowed over a Spring managed SqlSession
在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 就可以了。
我的專案中是這麼配置的:
在ServiceImpl中我使用了SqlSessionTemplate
根據上面仁兄的回答,我是不需要使用SqlSessionTemplate的,直接讓spring給我進行管理即可!!!
因此我取消了關於SqlSessionTemplate的配置!並且進行單元測試,發現測試成功,並沒有報錯!所以可見
總結:
在與spring的配合中最好不要直接操縱sqlSession,直接讓mapper與mapper.xml對應使用底層spring去操作sqlSession即可!!!
借鑑:
https://www.oschina.net/question/9