1. 程式人生 > >Mybatis中Manual close is not allowed over a Spring managed SqlSession

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