MyBatis架构原理
架构原理篇
架构图
接口层
接口层是MyBatis提供给开发人员的一套API。主要使用SqlSession接口。通过SqlSession接口和Mapper接口。开发人员可以通知MyBatis框架调用哪一条SQL命令以及SQL命令关联参数。
SQLSession接口使用方式:
public void start() throws IOException{
InputStream is = Resources.getResourceAsStream("myBatis-config.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
session = factory.openSession();
try{
session.insert("InsertDept_Sql",dept);
}finally{
session.close();
}
}
Mapper接口调用方式:
public void start() throws IOException{
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 通过SqlSessionFactory获取sqlSession
SqlSession session = sqlSessionFactory.openSession();
try {
// 通过SqlSession对象获取BlogMapper接口的代理对象,
// 然后赋值给BlogMapper接口
BlogMapper mapper = session.getMapper(BlogMapper.class);
// 调用BlogMapper接口的方法来执行指定的数据库操作
Blog blog = mapper.selectBlog(101);
} finally {
session.close();
}
}
数据处理层
数据处理层是Mybatis框架内部的核心实现,来完成对映射文件的解析与数据处理:
(1)参数解析与参数绑定
(2)SQL解析
(3)结果集映射解析与结果集映射处理
支撑层
支撑层用来完成Mybatis与数据库基本连接方式以及SQL命令与配置文件对应。主要负责:
(1)MyBatis与数据库连接方式管理
(2)Mybatis对事务管理方式
(3)配置文件加载
(4)Mybatis查询缓存管理
架构流程图
说明:
-
mybatis配置文件
- SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
- Mapper.xml,此文件作为mybatis的sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。
-
SqlSessionFactory
通过mybatis环境等配置信息构造SqlSessionFactory,即会话工厂。
-
sqlSession
通过会话工厂创建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编程中对结果解析处理过程。
调用流程图
四大组件(完成JDBC操作):
Executor、StatementHandler、ParameterHandler、ResultSethandler
Configuration:
封装了全局配置文件和映射文件中的信息。
BoundSql:
组合模式,将解析之后的sql语句和解析出来的参数信息进行封装。
MappedStatement:
封装select/insert/update/delete等CRUD标签的信息,包含入参类型信息和输出类型信息等。
SqlSession
接受开发人员提供Statement Id和参数,并返回操作结果。
Executor
Mybatis执行器,是Mybatis调度的核心,负责SQL语句的生成和查询缓存的维护。
StatementHandler
封装了JDBC Statement操作,负责对JDBC Statement的操作,如设置参数、将Statement结果集转换成List集合。
ParameterHandler
负责对用户传递的参数转换成JDBC Statement所需要的参数。
ResultSetHandler
负责将JDBC返回的ResultSet结果集对象转换成List类型的集合。
TypeHandler
负责java数据类型和jdbc数据之间的映射和转换。
MappedStatement
维护了一条<select|update|delete|insert>节点的封装。
SqlSource
负责根据用户传递的parameterObject,动态地生成Sql语句,将信息封装到BoundSql对象中,并返回BoundSql表示动态生成的Sql语句以及相应的参数信息。
Configuration
MyBatis所有的配置信息都维持在Configuration对象之中。