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地图