INDUSTRY INFORMATION

新闻资讯

当前位置:首页 > 新闻中心

mybatis中SqlSession的线程安全性讨论

发布时间:2020·01·17 浏览:1658

 对绝大数Java开发者而言mybatis并不陌生,从经典的SSM(Spring,spring-mvc,mybatis)框架,到现在流行的Springboot,随处可见mybatis的身影。mybatis作为比较主流的orm框架,支持用户定制sql,灵活又方便,颇受开发者喜爱。我们在使用mybatis难免会遇到各种坑,其中SqlSession的线程安全性问题也总会遇到。

       SqlSession作为一个接口,其并没有线程安全性的问题,我们常说的线程安全问题是SqlSession的一个实现类DefaultSqlSession,mybatis的作者也对此类加以"Note that this class is not Thread-Safe"的注释。此外SqlSession还有两个实现类SqlSessionManager和SqlSessionTemplate,这两个实现类是线程安全的。
线程不安全的DefaultSqlSession

        我们都知道DefaultSqlSession是线程不安全的,也会有很多博主讲解"SqlSessionTemplate是如何保证DefaultSqlSession线程安全的",但是DefaultSqlSession不安全的体现是什么?不安全产生的原因在哪?今天作者通过一个例子给读者演示下并发情况下DefaultSqlSession线程不安全的表现,以及源码追踪产生线程安全问题的源头。

样例代码如下:

     配置文件mybatis-config.xml,简单配置保证能正常运行

   
       
       
       
           
               
               
                   
                   
                   
                   
               

           

       

       
           
            
       

   

 

上一篇: 配置密码策略

下一篇: 普通防火墙和现代防火墙有什么区别

推荐案例
推荐新闻