1. 程式人生 > 程式設計 >新手小白用C# winform 讀取Excel表的實現

新手小白用C# winform 讀取Excel表的實現

遇到的問題

如果我們做一個請求時候多次使用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.}