劝君莫惜金缕衣,劝君惜取少年时。花开堪折直须折,莫待无花空折枝。
本文源码使用到 Jar 包版本约束如下:
- Spring Boot,2.4.12;
- mybatis-spring-boot-starter,1.3.2;
博客《Mybatis 向 Spring IOC 容器注册的 Mapper 接口是啥?》分析到,Mybatis 会为每个 Mapper 接口向 Spring IOC 容器注册一个 MapperProxy 对象,该对象包含一个 SqlSession 类型的 sqlSession 属性,且该属性引用从 MybatisAutoConfiguration 配置类注册的 SqlSessionTemplate。本着“知其然知其所以,然追源溯本,融会贯通”的学习精神,不禁困惑 —— 为什么是 SqlSessionTemplate,而不是 SqlSession 的其他实现类比如 DefaultSqlSession, SqlSessionTemplate 解决了哪些问题?
本文基于源码,从如下几个着重点解决这个问题:
- DefaultSqlSession 线程不安全分析;
- SqlSessionTemplate 如何保证线程安全性;



