天天看点

MyBatis架构解析

一、整体架构

1、接口层:SqlSession

2、核心处理层:1)配置解析;2)参数映射;3)SQL解析;4)SQL执行;5)结果集映射;6)插件

3、基础支持层:1)数据源模块;2)事务管理模块;3)缓存模块;4)Binding模块;5)反射模块;6)类型转换;7)日志模块;8)资源加载;9)解析器模块

二、各模块内容简介

1)SqlSession:采用策略模式,通过该对象执行映射配置文件中定义的SQL语句,完成相应的数据操作。

2)配置解析:使用解析器模块对配置文件进行解析,注册

3)参数映射:JAVA—->JDBC

4)SQL解析:根据sql节点获得SQL代码片段,并根据id字段与mapper中方法进行绑定,映射参数列表和结果集对象,将这一切完成后,生成代理

5)SQL执行:上一步生成的代理进行sql代码的执行

6)结果集映射:JDBC—->JAVA

7)插件:采用责任链模式,通过继承Interceptor接口,自定义拦截器对SQL语句执行过程中的某一点进行拦截。需配合使用@Intercepts和@Signature注解。可用于分页插件、分表插件等

8)数据源模块:工程方法模式,MyBatis提供了两个数据源实现类PooledDataSource和UnpooledDataSource。

9)事务管理模块:mybatis提供了两个实现JdbcTransaction和ManagedTransaction。前者依赖于JDBC Connection控制事务的提交和回滚,后者依靠容器管理,例如spring。

10)缓存模块:使用装饰器模式,一级缓存:会话级别缓存,每一个SqlSession对象一个会话;二级缓存:应用级别的缓存,所有SqlSession共用

11)Binding模块:编译时,通过MapperRegistry对mapper.java和mapper.xml进行注册绑定、检查。可在编译时发现绑定错误,且提供更加面向对象的方式使用mybatis

12)反射模块:简化反射操作相关代码,并进行元数据类型预加载来提升性能

13)类型转换:Java类型与JDBC类型之间的转换

14)日志模块:采用适配器模式和JDK动态代理实现

15)资源加载:JDK类加载器,单例模式

16)解析器模块:采用DOM解析方式结合XPath解析,使用建造者模式

参考:《MyBatis技术内幕》

相关推荐:springboot集成mybatis

继续阅读