MyBatis基础之SqlSession

SqlSession 线程安全问题

当你翻看 SqlSession 的源码时,你会发现它只是一个接口。我们通过 MyBatis 操作数据库,实际上就是通过 SqlSession 获取一个 JDBC 链接,然后操作数据库。

SqlSession 接口有 3 个实现类:

# 实现类
1 DefaultSqlSession
2 SqlSessionManager
3 SqlSessionTemplate(在 mybatis-spring 包中)

其中

  • DefaultSqlSession 的注释中很直接地标识:Note that this class is not Thread-Safe.

  • SqlSessionManager 最终用到的也是 SqlSession ,因此它也是 not Thread-Safe

  • SqlSessionTemplate 倒是线程安全的,但是它在 mybatis-spring 包中,是用在 mybatis 和 spring 整合中的,暂时用不上。

因此,SqlSession 不应该是单例的,于此同时,依赖于 session 的 Mapper 要么也应该是多例的,要么就要用上 ThreadLocal !

相关推荐
青年有志2 小时前
深入浅出 MyBatis | CRUD 操作、配置解析
数据库·tomcat·mybatis
00Allen002 小时前
mybatis/mybatisplus
java·spring·mybatis
Echo flower2 小时前
mybatis-plus自动填充时间的配置类实现
java·数据库·mybatis
编码浪子3 小时前
Springboot3国际化
java·spring·mybatis
Yan.love4 小时前
【MyBatis 核心工作机制】注解式开发与动态代理原理
java·mybatis
油丶酸萝卜别吃14 小时前
MyBatis中XML文件的模板
xml·数据库·mybatis
菠萝咕噜肉i15 小时前
MyBatis是什么?为什么有全自动ORM框架还是MyBatis比较受欢迎?
java·mybatis·框架·半自动
向阳121816 小时前
mybatis 缓存
java·缓存·mybatis
一只淡水鱼6617 小时前
【mybatis】详解 # 和 $ 的区别,两者分别适用于哪种场景,使用 $ 不当会造成什么影响
sql·spring·mybatis·sql注入
秋恬意17 小时前
IBatis和MyBatis在细节上的不同有哪些
java·mybatis