Mybatis框架从源码角度来讲执行CRUD的时候如何保证线程安全?

##近期准备做一下Mybatis的源码解读,整个系列大概会有6-7篇文章。
先释放一下目录:
1.Mybatis框架组件设计&顶层接口
2.Mybatis框架启动流程分析
3.Mybatis框架源码Configuration分析
4.Mybatis框架一条插入语句的执行流程
###5.Mybatis框架从源码角度来讲执行增,删,改的时候如何保证线程安全?
6.Mybatis框架一条查询语句的执行流程
7.Mybatis的日志&异常体系
8.Mybatis与Spring集成过程
9.Mybatis的CRUD代码生成

这几天没有更新系列,是因为笔者在写一个代码生成工具,基于springboot+mybatis+freemarker的极简轻量级生成工具,后续会专门开博客介绍。
本篇主要讲解Mybatis框架从源码角度来讲执行增,删,改的时候如何保证线程安全。
讲解这个问题的原因是有网友跟我一起探讨过这样一个问题,一个线程执行DAO方法的时候会不会将另一个线程的DAO方法变量覆盖。这个大佬一看应该就知道肯定不会,那么原因是啥呢,为什么不会呢?本文从源码的角度探讨一下。
首先我们还是从前几篇使用的Test Case说起:
执行入口.png

ThreadLocal.png

创建执行器.png

创建sqlsession.png

通过上面四张图和对源码的跟踪,我们可以知道利用ThreadLocal可以对每个业务线程下的sql会话进行隔离,因此不会出现不同线程间的参数上下文出现互相覆盖或者影响。另外Mybatis对于ThreadLocal的使用还体现在日志方面,后面会讲到。大家可以在源码中搜一下ThreadLocal,看是否还有别的地方在用。

猜你喜欢

转载自blog.csdn.net/u010504064/article/details/107300049