新手小白用C# winform 讀取Excel表的實現
阿新 • • 發佈:2021-01-14
遇到的問題
如果我們做一個請求時候多次使用sqlsession物件這樣就會造成sqlsession 浪費,也就是資源浪費,效率也會降低
我們需要達到的目的就是使用者發出的一個請求中實現sqlsession的共享
請求沒有改變,執行緒就不會改變
最終的目的就是在同一個執行緒中實現資料sqlsession的共享
解決方案
ThreadLoacl: 作用 在同一個執行緒中實現資料(sqlsession)的共享
底層使用的map集合 map.put(key,value);
map.put(執行緒的ID,conn)
程式碼實現
1.publicclassDBUtil{ 2. 3.privatestaticSqlSessionFactoryfactory; 4. 5.privatestaticThreadLocal<SqlSession>tl=newThreadLocal<>(); 6. 7.static{ 8.InputStreaminputStream=null; 9.try{ 10.//[1]解析myBatis.xml檔案 11.inputStream=Resources.getResourceAsStream("mybatis.xml"); 12.//[2]獲得sqlsession工廠 13.factory=newSqlSessionFactoryBuilder().build(inputStream); 14.}catch(IOExceptione){ 15.e.printStackTrace(); 16.} 17.} 18.//獲得sqlsession物件 19.publicstaticSqlSessiongetSqlSession(){ 20. 21.//獲得ThreadLoacl中的sqlsession物件 22.SqlSessionsqlSession=tl.get(); 23. 24.if(sqlSession==null){ 25. 26.sqlSession=factory.openSession(true); 27. 28.//把建立好的物件放到ThreadLoacl 29.tl.set(sqlSession); 30.} 31. 32.returntl.get(); 33.} 34. 35. 36.//關閉sqlsession 37. 38.publicstaticvoidcloseAll(){ 39. 40.SqlSessionsqlSession=tl.get(); 41. 42.if(sqlSession!=null){ 43. 44.sqlSession.close(); 45. 46.} 47.tl.set(null); 48.} 49. 50.}