在 MyBatis 的主要工作流程里面,不同的功能是由很多不同的类协作完成的,它们分布在 MyBatis jar 包的不同的 package 里面。我们来看一下 MyBatis 的jar包(基于3.4.6),jar包结构是这样的(21个包):

跟Spring一样,MyBatis 按照功能职责的不同,所有的 package 可以分成不同的工作层次
1.接口层
第一个是跟客户打交道的服务员,它是用来接收程序的工作指令的,我们把它叫做接口层。
接口层是我们打交道最多的。核心对象是 SqlSession,它是上层应用和 MyBatis 打交道的桥梁,SqlSession 上定义了非常多的对数据库的操作方法。接口层在接收到调用请求的时候,会调用核心处理层的相应模块来完成具体的数据库操作。
2.核心处理层
第二个是后台的厨师,他们根据客户的点菜单,把原材料加工成成品,然后传到窗口。这一层是真正去操作数据的,我们把它叫做核心层。
既然叫核心处理层,也就是跟数据库操作相关的动作都是在这一层完成的。核心处理层主要做了这几件事:
-
参数映射: 把接口中传入的参数解析并且映射成JDBC类型
-
SQL解析:解析xml文件中的SQL语句,包括插入参数,和动态SQL的生成;
-
SQL执行:执行SQL语句;
-
结果映射: 处理结果集,并映射成Java对象。
PS:插件也属于核心层,这是由它的工作方式和拦截的对象决定的。
3.基础支持层
最后就是餐厅也需要有人做后勤(比如清洁、采购、财务),来支持厨师的工作和整个餐厅运营。我们把它叫做基础层。
基础支持层主要是一些抽取出来的通用的功能(实现复用),用来支持核心处理层的功能。比如数据源、缓存、日志、xml解析、反射、IO、事务等等这些功能。
三层中的主要对象
| 对象 | 相关对象 | 作用 |
|---|---|---|
| Configuration | MapperRegistry TypeAliasRegistry TypeHandlerRegistry | 包含了 MyBatis 的所有的配置信息 |
| SqlSession | SqlSessionFactory DefaultSqlSession | 对操作数据库的增删改査的 API 进行了封装,提供给应用层使用 |
| Executor | BaseExecutor SimpleExecutor BatchExecutor ReuseExecutor | MyBatis 执行器 , 是 MyBatis 调度的核心, 负责SQL语句的生成和查询缓存的维护 |
| StatementHandler | BaseStatementHandler SimpleStatementHandler PreparedStatementHandler CallableStatementHandler | 封装了 JDBC Statement 操作,负责对 JDBC Statement 的操作, 如设置参数、将Statement结果转换为List集合 |
| ParameterHandler | DefaultParameterHandler | 把用户传递的参数转换成 JDBC Statement 所需要的参数 |
| ResultSetHandler | DefaultResultSetHandler | 把 JDBC返回的 RcsultSet结果集对象转换成 List 类型的集合 |
| MapperProxy | MapperProxyFactory | 代理对象,用于代理 Mapper 接口方法 |
| MappedStatement | SqlSource BoundSql | MappedStatement 维护了一条 〈select 丨 update丨 delete丨 insert〉节点的封装, 包括了 SQL 信息、入参信息、出参信息 |







还没有评论,来说两句吧...