
Mybatis源码
大·风
想起来什么就写点什么。
展开
-
MyBatis源码简读——源码拆分
代码的拆分整个Mybatis源码大概被分为三个部分:基础技术支持代码(日志、异常、等辅助类代码) 业务代码(配置的解析,SQL的执行等) 扩展类代码(插件接口的代码)目前基础类代码的范围是:注解类(annotations包);绑定模块类(binding包);配置解析(builder包);缓存(cache包);数据源(datasource包);异常(exceptions包);...原创 2019-04-13 12:55:45 · 496 阅读 · 0 评论 -
MyBatis源码简读——2.3 4 ParameterHandler和ResultSetHandler
上一篇讲到PreparedStatementHandler的时候中间对参数处理的时候使用的是ParameterHandler;而在其查询最后也会使用一个resultSetHandler。本篇主要看看这两个类的逻辑ParameterHandler对SQL执行方法参数处理的顶级接口/** * A parameter handler sets the parameters of the ...原创 2019-04-21 21:44:39 · 259 阅读 · 0 评论 -
MyBatis源码简读——2.3 3 StatementHandler
StatementHandlerStatement 处理器 的顶级接口,里面接口不算多。/** * Statement 处理器 的顶级接口 * @author Clinton Begin */public interface StatementHandler { // 准备操作,创建Statement对象 Statement prepare(Connection co...原创 2019-04-21 17:49:41 · 207 阅读 · 0 评论 -
MyBatis源码简读——2.3 2 Executor执行器
Executor** * 执行器接口 * @author Clinton Begin */public interface Executor { // 空的handler对象的枚举 ResultHandler NO_RESULT_HANDLER = null; // 更新 or 插入 or 删除,由传入的 MappedStatement 的 SQL 所决定 int u...原创 2019-04-21 15:54:35 · 504 阅读 · 0 评论 -
MyBatis源码简读——2.3 1 SqlSession
#执行流程SQL执行的流程如下图graph TDA[SqlSession] --> B[Executor]B --> C[StatementHandler]C --> D[ParameterHandler]D --> E[Statement]E --> F[数据库]F --> G[ResultSet]G --> H[ResultSet...原创 2019-04-21 10:38:03 · 270 阅读 · 0 评论 -
MyBatis源码简读——2.2 SQL的解析
SQL初始化被分为主要几个内容SQL初始化以LanguageDriver接口为主要内容,以获得SqlSource为结束。主要涉及到的几个内容为LanguageDriver 语言驱动XMLScriptBuilder SqlSource的构造器LanguageDriverRegistry 注册表NodeHandler 节点处理DynamicContext 动态环境上下文SqlNod...原创 2019-04-21 10:28:26 · 349 阅读 · 0 评论 -
MyBatis源码简读——2.1.3 mapper接口的加载
mapper接口初始化的方法在MapperAnnotationBuilder 中,它内部的方法还是非常多的看起来他的方法非常多,单其实和XMLMapperBuilder还是有一些相似之处。MapperAnnotationBuilder其对资源的解析也是在parse方法中 public void parse() { // 判断当前 Mapper 接口是否应...原创 2019-04-18 21:36:19 · 316 阅读 · 0 评论 -
MyBatis源码简读——2.1.2 mapper映射文件解析
映射文件的解析入口是 org.apache.ibatis.builder.xml.XMLMapperBuilder其主要方法和属性属性首先简单介绍下几个属性的作用builderAssistant,一个mapper构造器的工具 parser:基于java XPath的解析器 resource:资源地址 sqlFragments:是一个map,大概意思是一个可以被其他语句引用...原创 2019-04-17 22:34:10 · 395 阅读 · 0 评论 -
MyBatis源码简读——2.1.1 配置文件的加载
MyBatis源码中第二部分是一个庞大的部分,同时也是源码笔记的核心。主要内容涉及资源加载,SQL加载,SQL执行和结果集的处理。首先一个比较大的模块是资源的加载。mybatis中我们定义的主要资源主要被分为三个部分配置文件 mapper.xml(定义在xml中的SQL) mapper接口后续还有很多东西需要说,但是首先学习这三部分的加载过程。本篇主要学习的是配置文件的...原创 2019-04-16 23:13:45 · 292 阅读 · 0 评论 -
MyBatis源码简读——1.3 基础支持模块(二)
本章主要涉及内容事务模块,配置解析模块事务模块事务模块主要内容在transaction包下面事务模块主要是两个接口以及两种实现。事务接口public interface Transaction { /** * 获得连接 * Retrieve inner database connection. * @return DataBase connect...原创 2019-04-15 22:27:08 · 229 阅读 · 0 评论 -
MyBatis源码简读——1.2 基础支持模块(一)
上一章讲了比较简单的基础模块,现在看下那些和业务逻辑有一定关系的支持模块。注解类(annotations包); 绑定模块类(binding包); 配置解析(builder包); 事务(transaction包);注解模块注解模块主要在annotations包下面,定义了mybatis中所有的注解。简单注解CRUD类的注解:Select,Update,Delete,Inse...原创 2019-04-15 22:26:51 · 264 阅读 · 0 评论 -
MyBatis源码简读——1.1 简单的基础支持模块
之前我们知道mybatis的代码里面很多包都是提供工具类的支持,其主要分布在注解类(annotations包); 绑定模块类(binding包); 配置解析(builder包); 缓存(cache包); 数据源(datasource包); 异常(exceptions包); JDBC(jdbc包); 日志(logging包); IO(IO包); 反射(reflection包);...原创 2019-04-13 15:00:48 · 372 阅读 · 0 评论 -
MyBatis源码简读——3.1 mybatis提供的拓展方法
根据官方文档,Mybatis的扩展主要在Interceptor中。Interceptor/** * 拦截器接口 * @author Clinton Begin */public interface Interceptor { // 拦截方法 Object intercept(Invocation invocation) throws Throwable; // 应用...原创 2019-04-24 00:03:26 · 207 阅读 · 0 评论