首页 > 编程语言 >Mybatis源码分析(二十一) - 核心流程分析

Mybatis源码分析(二十一) - 核心流程分析

时间:2022-11-30 14:40:20浏览次数:33  
标签:分析 初始化 实例 xml 对象 创建 建造 源码 Mybatis


mybatis核心流程三大阶段

初始化阶段

读取XML配置文件和注解中的配置信息,创建配置对象,并完成各个模块的初始化的工作

代理阶段

封装iBatis的编程模型,使用mapper接口开发的初始化工作

数据读写阶段

通过SqlSession完成SQL的解析,参数的映射、SQL的执行、结果的解析过程

Mybatis的初始化 建造者模式

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

Mybatis源码分析(二十一) - 核心流程分析_初始化

Builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建
ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例
Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建
Product:要创建的复杂对象

与工厂模式区别

对象复杂度

建造者建造的对象更加复杂,是一个复合产品,它由各个部件复合而成,部件不同产品对象不同,生成的产品粒度细
在工厂方法模式里,我们关注的是一个产品整体,无须关心产品的各部分是如何创建出来的

客户端参与程度

建造者模式,导演对象参与了产品的创建,决定了产品的类型和内容,参与度高;适合实例化对象时属性变化频繁的场景
工厂模式,客户端对产品的创建过程参与度低,对象实例化时属性值相对比较固定

使用场景

  1. 需要生成的对象具有复杂的内部结构,实例化对象时要屏蔽掉对象内部的细节,让上层代码与复杂对象的实例化过程解耦,可以使用建造者模式;简而言之,如果“遇到多个构造器参数时要考虑用构建器”
  2. 一个对象的实例化是依赖各个组件的产生以及装配顺序,关注的是一步一步地组装出目标对象,可以使用建造器模式

Mybatis源码分析(二十一) - 核心流程分析_实例化_02

XMLConfigBuilder: 主要负责解析mybatis-config.xml
XMLMapperBuilder: 主要负责解析映射配置文件
XMLStatementBuilder: 主要负责解析映射配置文件中的SQL节点

映射器的关键类

  1. Configuration : Mybatis启动初始化的核心就是将所有xml配置文件信息加载到Configuration对象中, Configuration是单例的,生命周期是应用级的
  2. MapperRegistry:mapper接口动态代理工厂类的注册中心。在MyBatis中,通过mapperProxy实现InvocationHandler接口,MapperProxyFactory用于生成动态代理的实例对象
  3. ResultMap:用于解析mapper.xml文件中的resultMap节点,使用ResultMapping来封装id,result等子元素
  4. MappedStatement:用于存储mapper.xml文件中的select、insert、update和delete节点,同时还包含了这些节点的很多重要属性
  5. SqlSource:mapper.xml文件中的sql语句会被解析成SqlSource对象,经过解析SqlSource包含的语句最终仅仅包含?占位符,可以直接提交给数据库执行

configuration类图解

Mybatis源码分析(二十一) - 核心流程分析_sql_03

mappedStatment图解

Mybatis源码分析(二十一) - 核心流程分析_实例化_04

ResultMap图解

Mybatis源码分析(二十一) - 核心流程分析_初始化_05

MyBatis初始化过程

Mybatis源码分析(二十一) - 核心流程分析_sql_06

 

标签:分析,初始化,实例,xml,对象,创建,建造,源码,Mybatis
From: https://blog.51cto.com/u_14906615/5899418

相关文章