SqlSession和SqlSessionTemplate线程安全性

我们已经知道SqlSession线程安全问题的产生原因就是多个线程并发使用同一个SqlSession的实例。

SqlSessionTemplate中避免了多个线程并发使用同一个SqlSession的实例,这也是SqlSessionTemplate中一级缓存失效的原因,因为一级缓存是基于同一个DefaultSqlSession实例实现的。

究其根本SqlSession真正的实现类只有DefaultSqlSession,SqlSessionManager和SqlSessionTemplate都是通过代理转发到DefaultSqlSession对应方法。

单例模式下的DefaultSqlSession不是线程安全的,SqlSessionManager和SqlSessionTemplate线程安全的根本就是每一个线程对应的SqlSession都是不同的。如果每一个操作都创建一个SqlSession对象,操作完又进行销毁导致性能极差。通过线程私有ThreadLocal存储SqlSession进行复用,从而提高性能。

posted @ 2021-12-06 20:39  一刹流云散  阅读(404)  评论(0编辑  收藏  举报