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

Manual close is not allowed over a Spring managed SqlSession

在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

相關文章
相關標籤/搜索