随笔分类 - 源码 / Mybatis
Mybatis
摘要:1 前言 最近项目上线,比较忙,没怎么写哈,一个月多了终于忙的差不多了。今儿看一个关于自增 ID 获取过程。 我们平时插入数据,关于主键的值,我们从程序的角度看的话,大概分两种一种是主动,一种就是被动。 主动:即我们程序在插入的时候直接主动赋予主键 id 的值,比如 uuid、雪花算法生成的id等,
阅读全文
摘要:1 前言 我之前看过插件的执行过程:【Mybatis】【插件】Mybatis源码解析-插件机制,主要是通过一个 Executor 的创建以及执行过程串了一下插件,我们这里简单回忆下: (1)Mybatis 把所有的插件都放进了 InterceptorChain 类里的 interceptors 集合
阅读全文
摘要:1 前言 之前我们从数据库连接的角度看过 MyBatis 和 Spring 的交互,以及在动态数据源下的交互,那么我们这节看什么呢?看一下在有无 @Transitional 下的事务提交的差异。 想一个问题,事务提交或者回滚,最后的落点是什么?是不是就是那条数据库连接的提交或者回滚,就跟我们早之前的
阅读全文
摘要:1 前言 本节我们续前两节(调试查看Mapper接口生成过程、源码分析 Mapper生成注入入口分析)的内容,看下 MapperFactoryBean 是如何代理掉我们的 @Mapper 接口的。 上节我们看到我们的 Mapper 接口的 BeanDefinition, 已经放进 spring 的上
阅读全文
摘要:1 前言 续上节主要用调试的方式,看了一下 Mapper 接口的注入过程,本节就从源码的角度,一步步分析 Mapper 接口都是怎么注入到 Spring容器中的。 2 源码分析 2.1 入口分析 我们上节看到扫描 @Mapper 的方式有两种,一种是基于 @MapperScan 的主动扫描,另一种就
阅读全文
摘要:1 前言 上次我们看了 Mybatis 是如何整合到 SpringBoot 的,那么平时我们可能直接用的就是 Mybatis-Plus,那么它又是如何结合到的 SpringBoot 的呢?原理其实是一样的,这节我们就来看看。 看的过程中,其实会深深体会 Mybatis-Plus 就是对 Mybati
阅读全文
摘要:1 前言 当你把 Spring、SpringBoot、Mybatis 或者 Mybatis-Plus 的源码都看过后,那有没有想过比如 Mybatis 如何整合到 Spring 或者 SpringBoot 的呢?就是思考框架跟框架之间的融合,那么这节我们就来看看单纯的 Mybatis 是如何融合到
阅读全文
摘要:1 前言 这节我们看个源码相关的东西,就是我们平时写的 Mapper 接口是怎么注入到 Spring 中呢? 我们会去想: 比如Mapper接口在启动时是如何被发现的? Mapper接口我们知道肯定是会创建代理的,那么代理对象又是如何创建的呢? 我们接下来就来看看。 1.1 入口分析 我们的 Map
阅读全文
摘要:1 前言 这节我们来看看插件,插件是来干啥的呢?一般情况下,开源框架都会提供插件或其他形式的拓展点,供开发者自行拓展。这样的 好处是显而易见的,一是增加了框架的灵活性。二是开发者可以结合实际需求,对框架进行 拓展,使其能够更好的工作。以 MyBatis 为例,我们可基于 MyBatis 插件机制实现
阅读全文
摘要:1 前言 这节我们来看一下 Mybatis 的缓存,Cache 是缓存接口,定义了一些基本的缓存操作,所有缓存类都应该实 现该接口。 MyBatis 内部提供了丰富的缓存实现类,比如具有基本缓存功能的 PerpetualCache ,具有 LRU 策略的缓存 LruCache ,以及可保证线程安全的
阅读全文
摘要:1 前言 上节带大家简单回顾了下 SqlSession以及内部的执行器的创建,那么这节我们就开始看我们的语句都是如何执行的。 调试代码: // xml <insert id="insertOne" parameterType="org.apache.ibatis.test.po.DemoPo" us
阅读全文
摘要:1 前言 上节我们看到 MapperMethod 执行的前奏,看到其实都是调用的 SqlSession 去执行的,而 SqlSession 又是调用其内部的 Executor 来进行执行的,那么这节我们先来看下回顾这两者的创建过程,方便下节讲执行哈。 2 SqlSession 的创建 起源是通过我们
阅读全文
摘要:1 前言 上节我们回顾了下 Mapper 接口的解析存放以及代理的入口和创建代理的过程,那么这节我们就来看下 MapperProxy 的代理执行逻辑。 2 源码分析 2.1 invoke 代理逻辑 Mapper 接口方法的代理逻辑首先会对拦截的方法进行一些过滤,以决定是否执行后续的操作。对应的代码如
阅读全文
摘要:1 前言 上节我们分析了配置文件的详细解析以及Mapper的详细解析,可以看作都是静态的东西,那么这节开始我们就要看动的东西,我们就来看看 SQL 的执行过程,我们平时都会写 Mapper接口,那么这节我们先来看下我们的 Mapper 接口的代理创建过程。 2 源码分析 2.1 Mapper 接口放
阅读全文
摘要:1 前言 在了解数据源后,我们来看下事务管理器,这个东西也很重要。 2 事务管理器类型 在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]"): JDBC – 这个配置直接使用了 JDBC 的提交和回滚功能,它依赖从数据源获得的连接来管理事务作用域。默认情
阅读全文
摘要:1 前言 这节我们练习下,Mybatis怎么引入第三方的数据源,我们这里拿 Druid 示例。 2 引入 Druid 数据源 2.1 依赖引入 首先我们要把 Druid 的包引进来吧: <dependency> <groupId>com.alibaba</groupId> <artifactId>d
阅读全文
摘要:1 前言 上节我们看过了连接池的管理,那么我们这节再看下非池连接的数据源的源码,这部分内容比较少,应该会很轻松,我们来看下吧。 2 源码分析 我们先来看下 UnpooledDataSource 类的基础信息: 2.1 基础信息 public class UnpooledDataSource impl
阅读全文
摘要:1 前言 上节我们主要讲解了一些数据源的分类和概念,并简单看了三种数据源工厂的创建,那么这节我们着重看下连接池方式的管理。 2 源码分析 关于连接池的几个类我先简单说下: PooledDataSourceFactory 数据源工厂,用于创建数据源的 PooledDataSource 数据源对象,用于
阅读全文
摘要:1 前言 这节我们要看一下数据源的东西了。比如我们以前在XML配置的什么驱动、url、账号密码啥的以及现在我们在SpringBoot下配置的其实都是为了创建我们的数据源,那么这节我们来看下数据源的基础知识和创建过程。 官方关于数据源的讲解:https://mybatis.org/mybatis-3/
阅读全文
摘要:1 前言 我们大概花了7篇文章讲解了配置解析的东西,其中花了4篇是在 mappers 的解析,内容比较多,涉及的类也比较多,所以我们这节来根据类做个总结,什么阶段用的哪个类进行了什么样的处理。 2 配置文件解析的过程 首先我们要清楚一点,我们最终是要得到SqlSessionFactory,因为有了它
阅读全文