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 !

相关推荐
麦克马8 小时前
MyBatis中字符串比较的类型解析问题与解决方案
mybatis
进击的CJR13 小时前
redis cluster 部署
java·redis·mybatis
sunddy_x19 小时前
Spring事务
java·spring·mybatis
阿杰 AJie20 小时前
MyBatis-Plus 的内置方法
java·数据库·mybatis
橘橙黄又青20 小时前
MyBatis篇
数据库·oracle·mybatis
一直都在57220 小时前
Spring3整合MyBatis实现增删改查操作
前端·vue.js·mybatis
迪霸戈21 小时前
MyBatis动态SQL避坑:为什么List用`[0]`而不是`get(0)`
sql·list·mybatis
不凡而大米、21 小时前
报错:传入的请求具有过多的参数。该服务器支持最多2100个参数
java·开发语言·mybatis
BD_Marathon21 小时前
MyBatis的一级缓存
spring·缓存·mybatis
啊吧怪不啊吧21 小时前
极致性能的服务器Redis之Hash类型及相关指令介绍
大数据·数据库·redis·sql·mybatis·哈希算法