mybatis--项目结构

mybatis--项目结构

    • 目录
    • 1 基础支持层
    • 2 核心处理层
      • 配置解析
      • SQL 解析
      • SQL 执行
      • 插件层
    • 3 接口层
    • 4 其他包
      • JDBC 模块
      • Lang 模块

目录

mybatis--项目结构_第1张图片

mybatis--项目结构_第2张图片
mybatis整体架构分为三层
基础支持层
核心处理层
结构层

基础支持层模块 对应包
反射模块 reflection
类型转换模块 type
日志模块 logging
资源加载模块 io
解析器模块 parsing
数据源模块 datasource
事务模块 transaction
缓存模块 cache
Binding 模块 binding
注解模块 annotations
异常模块 exceptions
核心处理层 对应包
配置解析 builder,mapping
SQL 解析 executor,cursor

1 基础支持层

基础支持层,包含整个 MyBatis 的基础模块,这些模块为核心处理层的功能提供了良好的支撑。

反射模块
对应reflection包
该模块对 Java 原生的反射进行了良好的封装,提了更加简洁易用的 API,方便上层使调用,并且对反射操作进行了一系列优化
类型转换模块
对应type包
1 MyBatis 为简化配置文件提供了别名机制该机制是类型转换模块的主要功能之一

2 类型转换模块另外一个功能,实现JDBC类型与Java类型之间的转换
在为 SQL 语句绑定实参时,会将数据由 Java 类型转换成 JDBC 类型。
在映射结果集时,会将数据由 JDBC 类型转换成 Java 类型。
日志模块
对应logging包
日志模块的一个主要功能是集成第三方日志框架。
IO 模块
对应io包
资源加载模块,主要是对类加载器进行封装,确定类加载器的使用顺序,并提供了加载类文件以及其他资源文件的功能 。
解析器模块
对应parsing包
1 对 XPath 进行封装,为 MyBatis 初始化时解析 mybatis-config.xml 配置文件以及映射配置文件提供支持
2 为处理动态 SQL 语句中的占位符提供支持
数据源模块
对应datasource包
数据源是实际开发中常用的组件之一,MyBatis 自身提供了相应的数据源实现,MyBatis 也提供了与第三方数据源集成的接口,这些功能都位于数据源模块之中
事务模块
对应transaction包
MyBatis 对数据库中的事务进行了抽象,其自身提供了相应的事务接口和简单实现。在很多场景中,MyBatis 会与 Spring 框架集成,并由 Spring 框架管理事务。
缓存模块
对应cache 包
MyBatis 中提供了一级缓存和二级缓存,这两级缓存都依赖缓存模块实现,同时他是运行在JVM中的如果数据量太大可能会影响其他应用,所以应当考虑其他如redis
缓存模块
对应cache 包
添加缓存是优化数据库时最有效的手段之一,MyBatis 中提供了一级缓存和二级缓存,这两级缓存都依赖缓存模块实现,同时他是运行在JVM中的如果数据量太大可能会影响其他应用,所以应当考虑其他如redis
Binding 模块
对应binding 包
1 在调用 SqlSession 相应方法执行数据库操作时,需要指定映射文件中定义的 SQL 节点,如果出现拼写错误,我们只能在运行时才能发现相应的异常。为了尽早发现这种错误,MyBatis 通过 Binding 模块,将用户自定义的 Mapper 接口与映射配置文件关联起来,系统可以通过调用自定义 Mapper 接口中的方法执行相应的 SQL 语句完成数据库操作,从而避免上述问题。
2 开发人员无须编写自定义 Mapper 接口的实现,MyBatis 会自动为其创建动态代理对象。在有些场景中,自定义 Mapper 接口可以完全代替映射配置文件,但有的映射规则和 SQL 语句的定义还是写在映射配置文件中比较方便,例如动态 SQL 语句的定义。
注解模块
对应annotations 包
随着 Java 注解的慢慢流行,MyBatis 提供了注解的方式,使得我们方便的在 Mapper 接口上编写简单的数据库 SQL 操作代码,而无需像之前一样,必须编写 SQL 在 XML 格式的 Mapper 文件中。虽然说,实际场景下,大家还是喜欢在 XML 格式的 Mapper 文件中编写响应的 SQL 操作。
异常模块
对应exceptions 包
定义了 MyBatis 专有的 PersistenceException 和 TooManyResultsException 异常。

2 核心处理层

在核心处理层中,实现了 MyBatis 的核心处理流程,其中包括 MyBatis 的初始化以及完成一次数据库操作的涉及的全部流程 。

配置解析

对应模块
builder 模块 配置解析过程
mapping 模块 SQL 操作解析后的映射

在 MyBatis 初始化过程中,会加载 mybatis-config.xml 配置文件、映射配置文件以及 Mapper 接口中的注解信息
解析后的配置信息会形成相应的对象并保存到 Configuration 对象中

节点(即 ResultSet 的映射规则) 会被解析成 ResultMap 对象。

 节点(即属性映射)会被解析成 ResultMapping 对象。

之后,利用该 Configuration 对象创建 SqlSessionFactory对象。待 MyBatis 初始化之后,
开发人员可以通过初始化得到 SqlSessionFactory 创建 SqlSession 对象并完成数据库操作。

SQL 解析

对应模块
scripting 模块

MyBatis 中的 scripting 模块,会根据用户传入的实参,解析映射文件中定义的动态 SQL 节点,并形成数据库可执行的 SQL 语句。
之后会处理 SQL 语句中的占位符,绑定用户传入的实参。

SQL 执行

对应模块
executor 模块 执行器
cursor 模块 执行结果的游标

SQL 语句的执行涉及多个组件 ,其中比较重要的是 
Executor 
主要负责维护一级缓存和二级缓存,并提供事务管理的相关操作,它会将数据库相关操作委托给 StatementHandler完成

StatementHandler
StatementHandler 
首先通过 ParameterHandler 完成 SQL 语句的实参绑定
然后通过 java.sql.Statement 对象执行 SQL 语句并得到结果集
最后通过 ResultSetHandler 完成结果集的映射,得到结果对象并返回
ParameterHandler
ResultSetHandler

mybatis--项目结构_第3张图片

插件层

对应 plugin 模块。

3 接口层

对应 session 模块。

接口层核心是 SqlSession 接口
接口中定义了 MyBatis 暴露给应用程序调用的 API
是上层应用与 MyBatis 交互的桥梁
接口层在接收到调用请求时,会调用核心处理层的相应模块来完成具体的数据库操作

4 其他包

JDBC 模块

对应 jdbc 包。JDBC 单元测试工具类

Lang 模块

对应 lang 包。

你可能感兴趣的:(mybatis,mybatis)