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 !

相关推荐
CoderYanger15 小时前
Java EE 进阶:8.MyBatis 操作数据库(入门)(第二弹)
java·数据库·spring boot·spring·面试·java-ee·mybatis
CoderYanger3 天前
Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)
java·数据库·spring·面试·职场和发展·java-ee·mybatis
真上帝的左手5 天前
30. 技术专题-‌应用框架组件-关系型数据库-MySQL-Mybatis
数据库·分布式·mysql·中间件·mybatis
雪芽蓝域zzs5 天前
第 2 章:整合 MySQL + MyBatis,搭建数据库基础、实体类、Mapper、测试查询
数据库·mysql·mybatis
wljt6 天前
公司二-面试题
java·开发语言·mybatis
VimorphTech6 天前
文本已经改了,旧的音频生成结果还能回写吗?
java·数据库·mybatis
麻瓜code6 天前
双写一致性:为什么是“删缓存“,而不是“改缓存“
java·缓存·mybatis
郭小李7 天前
mybatis 动态 sql
java·sql·mybatis
知守观7 天前
技术考古:iBATIS 2.3.4 时代的持久层,是如何用 Map 玩转 307 个存储过程的?
java·后端·mybatis
captain3767 天前
MyBatis Plus(1)
java·服务器·mybatis