mybatis源码阅读
Mybatis源码阅读。是个大坑。预计要在一年内填完。
文·若
架构师们好,我是练习两年半的java实习生,喜欢唱跳rap篮球
展开
-
Mybatis源码阅读(五 ):接口层——SqlSession
SqlSessionSqlSession是Mybatis的核心接口之一,对外提供常用的数据库操作api。mybatis提供了两个SqlSession的实现,其中最常用的是DefaultSqlSession。SqlSession的代码如下/** * 接口层,也是开发人员使用mybatis去操作sql所使用的主要的接口 * * @author Clinton Begin */public interface SqlSession extends Closeable { /**原创 2020-05-13 19:32:25 · 436 阅读 · 1 评论 -
Mybatis源码阅读(四):核心接口4.2——Executor(下)
SimpleExecutor接上一章博客继续。SImpleExecutor继承了BaseExecutor类,是最简单的Executor实现。Executor使用了模板方法模式,所以SimpleExecutor不必在关心一级缓存等操作,只需要实现基本的4个方法。首先看doQuery /** * 执行查询操作 * @param ms * @para...原创 2020-04-27 21:07:10 · 314 阅读 · 0 评论 -
Mybatis源码阅读(四):核心接口4.2——Executor(上)
ExecutorExecutor是Mybatis的核心接口之一,其中定义了数据库操作的基本方法。在实际应用中涉及的SqlSession的操作都是基于Executor实现的。Executor代码如下。/** * Mybatis的核心接口,定义了操作数据库的方法 * SqlSession接口的功能都是基于Executor实现的 * @author Clinton Begin */p...原创 2020-04-16 17:42:12 · 277 阅读 · 1 评论 -
Mybatis源码阅读(四):核心接口4.1——StatementHandler
前言难得复工了,公司百业待兴,有一大堆接口需要对接,忙的不行。回过神来发现自己快一个月没写博客了,赶紧抽时间写一写,不能断更。截止上一篇博客,我们已经把结果集映射的内容介绍完毕,接下来就是对Mybatis中的核心接口进行介绍,通过介绍这些核心接口,使读者们更深刻地理解Mybatis的运行机制以及原理。StatementHandlerStatementHandler接口是Mybati...原创 2020-03-26 13:25:25 · 294 阅读 · 1 评论 -
Mybatis源码阅读(三):结果集映射3.3 —— 主键生成策略
前言在前面两篇博客中,我们介绍了对于select语句的简单映射和嵌套映射。mybatis中使用ResultHandler等一系列的类,将查询结果封装到实体类中,可以说是mybatis中最复杂的过程,而剩下的insert、update、delete语句的操作则显得较为简单,没有复杂的映射逻辑。这里需要提的是在insert语句中,关于主键自增的问题。KeyGenerator在我们实际的开发...原创 2020-03-03 18:00:05 · 1668 阅读 · 0 评论 -
Mybatis源码阅读(三):结果集映射3.2 —— 嵌套映射
前言这段时间疫情原因躺在家做咸鱼,代码也没怎么敲,源码也没怎么看,博客拖更了一个月,今天心血来潮继续读了点源码,晚上正好抽空发个博客,证明我还活着。关于结果集映射,在一个月前的博客中已经将简单映射给讲述完毕,在实际应用中,除了单表查询以外,还可能通过连表查询多张表的记录,这些记录需要映射成多个java对象,而对象之间存在一对一、一对多等复杂的关联关系,这时候就需要嵌套映射。handle...原创 2020-02-18 20:15:48 · 463 阅读 · 0 评论 -
Mybatis源码阅读(三):结果集映射3.1 —— ResultSetBuilder与简单映射
前言在前面的文章中,已经介绍了三种SqlSource的代码,下面开始介绍执行select语句对查询结果集封装的过程。ResultSetHandler前面的文章中得知,mybatis会将结果集按照映射配置文件中定义的映射规则,如resultMap节点,映射成相应的结果对象。在StatementHandler接口执行完指定的select语句后,会将查询结果集交给ResultSetHan...原创 2020-01-16 16:39:20 · 388 阅读 · 0 评论 -
Mybatis源码阅读(二):动态节点解析2.2 —— SqlSourceBuilder与三种SqlSource
SqlSourceBuilder前面我们对SqlSource和SqlNode进行了介绍,在经过SqlNode.apply方法的解析之后,Sql语句会被传递到SqlSourceBuilder中进行进一步的解析。SqlSourceBuilder主要完成了两方面的操作,一方面是解析Sql中的#{}占位符定义的属性,如jdbcType、javaType(使用较少),一方面是把#{}占位符替换成?占位符...原创 2020-01-06 09:51:59 · 498 阅读 · 3 评论 -
Mybatis源码阅读(二):动态节点解析2.1 —— SqlSource和SqlNode
前言前面的文章介绍了mybatis核心配置文件和mapper文件的解析,之后因为加班比较重,加上个人也比较懒,一拖就是将近半个月,今天抽空开始第二部分的阅读。由前面的文章可知,mapper文件中定义的Sql节点会被解析成MappedStatement,其中的SQL语句会被解析成SqlSource。而Sql语句中定义的动态sql节点(如if节点、foreach节点)会被解析成SqlNode。...原创 2019-12-29 22:09:46 · 1021 阅读 · 2 评论 -
Mybatis源码阅读(一):Mybatis初始化1.3 —— 解析sql片段和sql节点
前言接上一篇博客,解析核心配置文件的流程还剩两块。Mybatis初始化1.2 —— 解析别名、插件、对象工厂、反射工具箱、环境本想着只是两个模块,随便写写就完事,没想到内容还不少,加上最近几天事情比较多,就没怎么更新,几天抽空编写剩下两块代码。解析sql片段sql节点配置在Mapper.xml文件中,用于配置一些常用的sql片段。 /** * 解析sql节点。...原创 2019-12-16 20:52:23 · 355 阅读 · 0 评论 -
Mybatis源码阅读(一):Mybatis初始化1.2 —— 解析别名、插件、对象工厂、反射工具箱、环境
接上一节 上一节:解析properties和settings解析typeAliasestypeAliases节点用于配置别名。别名在mapper中使用resultType时会使用到,是对实体类的简写。别名有两种配置方式通过package,直接扫描指定包下所有的类,注册别名 通过typeAliase,指定某个类为其注册别名别名注册代码如下 /** * 解析t...原创 2019-12-11 22:39:56 · 441 阅读 · 0 评论 -
Mybatis源码阅读(一):Mybatis初始化1.1 解析properties、settings
前言笔者大概是从今年的5月份开始喜欢上源码阅读的,起初是阅读徐郡明前辈的《Mybatis技术内幕》入的坑,不得不说大佬就是大佬,书中讲得东西很细很全。半年过去了,笔者对mybatis略知一二,也开始在为公司搭架构,并且基于Mybatis写了一套框架,但是尽管如此还是感觉自己对于源码的理解稍微有点浅。好比是初高中学数学吧,光看例题不做题是记不住的,因此产生了为mybatis写注释的想法,想要通过...原创 2019-12-09 22:17:16 · 258 阅读 · 0 评论