DefaulSqlSession 和SqlSessionTemplate 的区别是什么?
1)為什么SqlSessionTemplate 是線程安全的?
其內(nèi)部類SqlSessionInterceptor 的invoke()方法中的getSqlSession()方法:
如果當(dāng)前線程已經(jīng)有存在的SqlSession 對(duì)象,會(huì)在ThreadLocal 的容器中拿到SqlSessionHolder,獲取DefaultSqlSession。
如果沒(méi)有,則會(huì)new 一個(gè)SqlSession,并且綁定到SqlSessionHolder,放到ThreadLocal 中。
SqlSessionTemplate 中在同一個(gè)事務(wù)中使用同一個(gè)SqlSession。
調(diào)用closeSqlSession()關(guān)閉會(huì)話時(shí),如果存在事務(wù),減少holder 的引用計(jì)數(shù)。否則直接關(guān)閉SqlSession。
?
2)在編程式的開(kāi)發(fā)中,有什么方法保證SqlSession 的線程安全?
SqlSessionManager 同時(shí)實(shí)現(xiàn)了SqlSessionFactory、SqlSession 接口,通過(guò)ThreadLocal 容器維護(hù)SqlSession。
?
總結(jié)
以上是生活随笔為你收集整理的DefaulSqlSession 和SqlSessionTemplate 的区别是什么?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MyBatis 集成到Spring 的原
- 下一篇: 用注解还是用xml 配置?