MyBatis中ThreadLocal
生活随笔
收集整理的這篇文章主要介紹了
MyBatis中ThreadLocal
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
01 遇到的問題
–如果我們做一個請求時候多次使用sqlsession對象這樣就會造成sqlsession 浪費,也就是資源浪費,效率也會降低
–我們需要達到的目的就是用戶發出的一個請求中實現sqlsession的共享
–請求沒有改變,線程就不會改變
–最終的目的就是在同一個線程中實現數據sqlsession的共享
02解決方案
ThreadLoacl: 作用 在同一個線程中實現數據(sqlsession)的共享
底層使用的map集合 map.put(key,value);
map.put(線程的ID,conn)
03代碼實現
public class DBUtil { private static SqlSessionFactory factory; private static ThreadLocal<SqlSession> tl=new ThreadLocal<>(); static { InputStream inputStream = null; try { //[1]解析myBatis.xml文件 inputStream = Resources.getResourceAsStream("mybatis.xml"); //[2]獲得sqlsession工廠 factory=new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } //獲得sqlsession對象 public static SqlSession getSqlSession(){ //獲得ThreadLoacl中的sqlsession對象 SqlSession sqlSession = tl.get(); if(sqlSession==null){ sqlSession = factory.openSession(true); //把創建好的對象放到ThreadLoacl tl.set(sqlSession); } return tl.get(); } //關閉sqlsession public static void closeAll(){ SqlSession sqlSession = tl.get(); if(sqlSession!=null){ sqlSession.close(); } tl.set(null); } }總結
以上是生活随笔為你收集整理的MyBatis中ThreadLocal的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 古巴比伦灭亡的原因 古巴比伦为什么灭亡
- 下一篇: MyBatis中的注解