MyBatis 原理分析——基本原理

前言

MyBatis
是一个为广泛应用的持久化框架。一个简练的下示例如下所示,先创造会话工厂,然后由会话工厂中开拓对话,通过
class 类型和安排生成 Mapper 接口的代理实现,最后采取 Mapper
进行持久化操作。

本文将起 MyBatis 中之
SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession 和 Mapper
几单方面着手简单解析 MyBatis
的兑现原理。在末端的一连串文章被见面更具体分析核心类的底细实现。

SqlSessionFactoryBuilder

SqlSessionFactoryBuilder 使用 Builder 模式去生成
SqlSessionFactory,因此才供了差不多个 build 方法。这些方法可以接受 XML
配置文件之 Reader 或 InputStream 输入流,也得以流传 environment
指定环境要传播 Properties 作为性能。

于 build 方法的兑现中,首先根据传入的输入流、environment 和 Properties
构建 XMLConfigBuilder 对象,然后调用该 parse() 方法解析 XML 文件得到
Configuration 对象,最后创建 SqlSessionFactory 对象并返。

SqlSessionFactory

SqlSessionFactory 是一个工厂接口,默认实现是
DefaultSqlSessionFactory。SqlSessionFactory 的意是取得
SqlSession,因此提供了差不多个 openSession 方法,支持于 DataSource
数据源与一个加以的接连 Connection 中开创 SqlSession。

openSession 方法的脚实现好分成 5 步:

①自 Configuration 对象被获得环境布置 Environment;

②基于条件布置得到工作工厂 TransactionFactory;

③于事情工厂得到工作 Transaction,Transaction
包装了数据库连接,处理数据库连接的开创、准备、提交、回滚和关;

④创造执行器 Executor;

⑤创建 SqlSession,返回 DefaultSqlSession 的实例。

内部从 DataSource 数据源开创 SqlSession 的进程如下所示:

创建 SqlSession

SqlSession

SqlSession 是一个接口,默认实现是
DefaultSqlSession,提供了余数据库操作方式,如
select、selectOne、selectList、insert、update、delete、commit、rollback
和 getMapper 当艺术。getMapper 方法用于获取 Mapper 接口的代办实现。在
MyBatis 中建议以 Mapper 接口操作数据库。

数据库的增删改查和事情之提交回滚都是通过 Executor 执行之。Executor 有 3
种植档次 SIMPLE、REUSE、BATCH,默认使用简易执行器 SIMPLE,REUSE
类型执行器重用预处理语句,BATCH
类型执行器重用预处理语句和批量更新。Executor 对象的创造以 Configuration
类型的 newExecutor 方法中展开。

Executor 以履过程被,会为此到 StatementHandler、ParameterHandler 和
ResultHandler,其中 StatementHandler 封装了 java.sql.Statement
的有关操作,ParameterHandler 封装了 SQL 对参数的处理,ResultHandler
封装了对回数据集的拍卖。Executor 的实施进程,就是针对立即 3
单对象的调度过程。更多分析在后续文章被展开。

Mapper

Mapper 是经过 JDK 动态代理实现之,在 MapperProxyFactory 中开创
MapperProxy 并展开接口代理封装。对 Mapper 接口的调用实际上是出于
MapperProxy 落实的。

JDK 动态代理

当 MapperProxy 中,实现了 InvocationHandler 的 invoke 方法。methodCache
是一个 ConcurrentHashMap,其中蕴藏了办法及 MapperMethod 的照应关系。从
methodCache 缓存中获得或创造 MapperMethod 对象,然后调用 MapperMethod
对象的 execute 方法执行数据库操作。

MapperProxy

创建 MapperMethod 对象时,会以构造函数中初始化 SqlCommand
和MethodSignature。SqlCommand 包含了数据库操作的称,格式为
“接口名.操作名称”,以及 XML 中配备的操作类型,如
select、update等,把一个 Mapper 接口和
XML中之一个布局结合起来。MethodSignature
是道的签署,标记了措施的回值类型,对于使用 RowBounds(offset 和
limit
配置)、ResultHandler(结果处理回调)作为参数的艺术记录参数位置并初始化参数处理器。

于 MapperMethod 的 execute 方法被,根据 SqlCommand 中之配置选
SqlSession 的办法,根据 MethodSignature 的配备处理传入的参数,调用
SqlSession 的主意开展数据库操作,最后根据 MethodSignature
的返值类型返回操作结果。

每周 3 篇学习笔记或技术总结,面向来自然基础之 Java 程序员,内容提到 Java
进阶、虚拟机、MySQL、NoSQL、分布式计算、开源框架等大多单领域。关注作者或微信公众号
backend-develop 第一时间获取最新内容。

网站地图xml地图