Mybatis 源码学习(一)
Mybatis 源码学习(一)
准备:
- 认识mybatis的整体架构,主要的类的作用。
- 下载mybatis源码,导入idea开发工具,编写mybatis的测试需要的类、全局配置文件等。
- 通过断点调试来完成Mybatis的源码阅读。
认识Mybatis
mybatis简介
mybatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。mybatis几乎避免了所有的jdbc代码和手动设置参数以及获取结果集,它可以使用简单的XML或注解的来配置和映射SQL信息,将接口和java 的 POJOs(Plain Old java Objects , 普通的java对象) 映射成数据库中的记录。
-
mybatis的架构图
-
接口层:sqlsession—>接口层是mybatis提供给开发人员的一套API,只要使用sqlsession接口。通过Sqlsession和Mapper接口,开发人员可以通知Mybatis框架调用哪一条SQL命令以及SQL命令关联参数;
-
数据处理层:数据处理层是Mybatis框架内部的核心实现,来完成对映射文件的解析与数据处理;
- 参数解析和参数绑定;
- SQL解析;
- 结果集映射解析与结果集映射处理;
-
支撑层:支撑层用来完成Mybatis与数据库基本链接方式以及SQL命令与配置文件对应,主要负责:
- Mybatis与数据库的连接方式管理;
- Mybatis对事务管理方式;
- 配置文件的加载;
- Mybatis查询缓存管理;
Mybatis架构流程图
- Mybatis配置文件:
- SqlMapConfig.xml:此文件作为Mybatis的全局配置文件,配置了Mybatis的运行时的环境等信息;
- Mapper.xml:此文件作为mybatis的sql映射文件,文件中配置了操作数据库的SQL语句。此文件需要在SqlMapConfig.xml文件中加载;
- SqlSessionFactory:通过mybatis环境等配置信息构造SqlsessionFactory,即会话工厂;
- SqlSession :通过SqlSessionFactory会话工厂创建SqlSession即会话,程序员通过SqlSession会话接口对数据库进行增删改查操作;
- Executor:执行器,mybatis底层定义了Executor执行器接口来具体操作数据库,Executor接口有两个实现,一个是基本执行器(默认)、一个是缓存执行器,SqlSession底层是通过Executor接口来操作数据库的;
- MappedStatement:它也mybatis的底层封装对象,它包含了mybatis配置信息及SQL映射信息等。***Mapper.xml文件中一个select|insert|update|delete标签对应一个MappedStatement对象,select|insert|update|delete的id就是MappedStatement的id;
- MappedStatement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过MappedStatement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数;
- MappedStatement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过MappedStatement在执行sql后将输出结果映射至java对象中,输出结果映射过程就是jdbc编程中对结果集的解析处理过程;
Mybatis的调用流程图
- SQLSession:接收开发人员提供的Statement id和参数,并返回操作结果;
- Executor:Mybatis执行器,Mybatis调度的核心,负责SQL语句的生成和查询缓存的维护;
- StatementHandler:封装了jdbc Statement的操作,负责对jdbc Statement的操作,如设置参数、将Statement的结果集转换成List集合;
- ParameterHandler:负责对用户传递的参数转换成jabc Statement所需要的参数;
- ResultSetHandler:负责将jabc返回的ResultSet结果集对象换成List类型的集合;
- TypeHandler:负责将java数据类型和jdbc数据类型之间的映射和转换;
- MappedStatement:维护了一条<select|update|insert|delete>节点的封装;
- SqlSource:负责根据用户传递的parameterObject,动态的生成SQl语句,将信息封装到BoundSql对象中,并返回BoundSql表示动态生成的SQL语句以及相应的参数信息;
- Configuration:Mybatis的所有配置信息都维持在Configuration中;