需求调研、需求分析(即应用场景)
框架的设计思想
体系的组织结构设计
实现方法(技术)
常用配置
一、工作原理、运行流程
mybtis工作流程图
1、Resources 工具类,它包含一些实用方法,可以从类路径或其它位置加载资源文件,如mybatis的全局配置文件mybatisConfig.xml。
2、实例化SqlSessionFactoryBuilder
(1)实例化过程中加载配置文件(mybatis-config.xml、xxxMapper.xml),根据其中的配置创建Configuration(实例化Configuration :Configuration configuration = new Configuration(environment);)。Configuration 类包含了对一个 SqlSessionFactory 实例你可能关心的所有内容。在检查配置时,Configuration 类很有用,它允许你查找和操纵 SQL 映射(但当应用开始接收请求时不推荐使用)。你之前学习过的所有配置开关都存在于 Configuration 类,只不过它们是以 Java API 形式暴露的。以下是一个简单的示例,演示如何手动配置 Configuration 实例,然后将它传递给 build() 方法来创建 SqlSessionFactory。
(2)mybatis-config.xml作为MyBatis的全局配置文件,配置了MyBatis的运行环境等信息,其中主要内容是获取数据库连接。
(3)Mapper.xml文件即SQL映射文件,该文件中配置了操作数据库的SQL语句,需要在mybatis-config.xml中加载才能执行。mybatis-config.xml可以加载多个配置文件,每个配置文件对应数据库中的一张表
3、通过 SqlSessionFactoryBuilder 获得SqlSessionFactory。SqlSessionFactoryBuilder 可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。SqlSessionFactory 本身是由 SqlSessionFactoryBuilder 创建的,它可以从 XML、注解或 Java 配置代码来创建 SqlSessionFactory。
4、从 SqlSessionFactory 中获取 SqlSession。SqlSessionFactory 对象包含创建 SqlSession 实例的各种方法。
(1)SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。。
5、通过SqlSession获取mapper接口动态代理。
(1)映射器是一些绑定映射语句的接口。映射器接口的实例是从 SqlSession 中获得的。
6、动态代理回调SqlSession中的CRUD方法
7、根据SqlSession获得Executor执行器
(1)MyBatis底层定义了一个Executor接口来操作数据库,它会根据SqlSession传递的参数动态的生成需要执行的SQL语句,同时负责查询缓存的维护。
(2)在Executor接口的执行方法中,包含一个MappedStatement类型的参数,该参数是对映射信息的封装,用来存储要映射的SQL语句的id、参数等。Mapper.xml文件中一个SQL对应一个MappedStatement对象,SQL的id即是MappedStatement的id
(3)输入参数映射。在执行方法时,MappedStatement对象会对用户执行SQL语句的输入参数进行定义(可以定义为Map、List类型、基本类型和POJO类型),Executor执行器会通过MappedStatement对象在执行SQL前,将输入的Java对象映射到SQL语句中。这里对输入参数的映射过程就类似于JDBC编程中对preparedStatement对象设置参数的过程。
(4)输出结果映射。在数据库中执行完SQL语句后,MappedStatement对象会对SQL执行输出的结果进行定义(可以定义为Map和List类型、基本类型、POJO类型),Executor执行器会通过MappedStatement对象在执行SQL语句后,将输出结果映射至Java对象中。这种将输出结果映射到Java对象的过程就类似于JDBC编程中对结果的解析处理过程。
8、SqIlSession将查询方法转发给Exceutor
9、Executor基于JDBC获取数据
10、Executor执行相应的quert、insert等方法的内部,还会获取不同的StatementHandler,来负责映射参数的传入与输出
11、Executor通过反射将数据转换成pojo并返回给SqlSession
12、Sqlsession将结果返回给调用者
二、具体:MyBatis的主要的核心类
- SqlSessionFactoryBuilder:负责构建SqlSessionFactory。
- SqlSessionFactory:创建SqlSession实例的工厂类,SqlSessionFactory可以通过SqlSessionFactoryBuilder对象来获得,获得SqlSessionFactory后,可以通过openSession()方法来获取SqlSession对象。SqlSessionFactory对象一旦创建,就会在整个应用运行过程中始终存在。
- SqlSession:SQLSession主要是和数据库进行交互,完成增删改查功能。
- Executor: 主要负责Sql语句的执行和查询缓存的维护。
- StatementHandler: 封装了JDBC Statement操作,负责对JDBC Statement 的操作,如设置参数、将Statement结果集转换成List集合。
- ParameterHandler: 负责对用户传递的参数转换成JDBC Statement所需要的参数。
- ResultSetHandler:负责将JDBC返回的ResultSet结果集对象转换成List类型的集合。
- TypeHandler: 负责java和jdbc数据类型之间的映射和转换。
- MappedStatement: MappedStatement维护了一条<select|update|delete|insert>节点的封装。
- BoundSql:表示动态生成的SQL语句以及参数信息
- Configuration: MyBatis所有的配置信息都在Configuration对象里。
三、具体:动态代理存在的意义(dljd)
四、具体:数据库连接池(dljd)
五、缓存的执行流程(dljd)
六、mybatis知识梳理图(dljd)
七、参考
(0)ProcessOn模板社区-mybatis 启动流程以及和spring或springboot的整合 https://www.processon.com/view/6010c06be0b34d1f2cc9f619#pc
(1)博客园 02、Mybatis整体架构介绍 - 小龙Sunny - 博客园 https://www.cnblogs.com/xiaolongsunny/p/7436596.html
(2)博客园 MyBatis(1)-- MyBatis介绍 - BigJunOba - 博客园 https://www.cnblogs.com/BigJunOba/p/9755681.html
(3)csdn Mybatis(三)工作流程和架构分层简介_路辉的博客-CSDN博客 https://blog.csdn.net/qq_31363843/article/details/114539528
(4)spring&Mybatis核心流程图 | ProcessOn免费在线作图,在线流程图,在线思维导图 | https://v3.processon.com/view/5d40f199e4b0d11c8916be48
(5)一图看懂mybatis执行过程 http://www.mamicode.com/info-detail-2405772.html
(6)Mybatis原理介绍:MyBatis如何操作数据库? http://www.itcast.cn/news/20201218/15085044080.shtml
(7)MyBatis执行流程和注解开发-布布扣移动版-m.bubuko.com http://m.bubuko.com/infodetail-3529118.html
(8)Mybatis的基本运行流程 | 易学教程 http://www.e-learn.cn/content/qita/2108145
(9)博客园 mybatis执行流程 - nbg - 博客园 https://www.cnblogs.com/NBG-SDL/p/14070185.html