1. 功能架构
Mybatis
的功能架构分为以下几层:
-
API
接口层:提供给外部使用的接口API
,开发人员通过这些本地API
来操纵数据库。接口层接收到调用请求就会调用数据处理层来完成具体的数据处理。 -
数据处理层:负责具体的
SQL
查找、SQL
解析、SQL
执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。 -
基础支撑层:负责最基础的功能支撑,包括使用
XML
或者JAVA
代码方式构建及配置Mybatis
,以及连接管理、事务管理、配置加载和缓存处理。最基础的公共组件,为上层的数据处理层提供最基础支撑。
2. 核心流程
之间的案例中,使用Mybatis
完成一次数据库操作:
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
UserQuery userQuery = new UserQuery();
userQuery.setLoginName("zhangwei");
List<User> dynamicUserList = userMapper.selectDynamicUserList(userQuery);
System.out.println(dynamicUserList);
sqlSession.commit();
sqlSession.close();
其核心执行流程如图所示:
流程说明:
- 读取
MyBatis
的mybatis-config.xml
全局配置文件。 - 加载
Mapper
映射文件。 - 通过
MyBatis
的环境配置信息构造SqlSessionFactory
会话工厂。 - 会话工厂创建
SqlSession
对象,该对象中包含了执行SQL
语句的所有方法。 Executor
执行器根据SqlSession
传递的参数动态地生成需要执行的SQL
语句,同时负责查询缓存的维护。- 在
Executor
接口的执行方法中有一个MappedStatement
类型的参数,该参数是对映射信息的封装,用于存储要映射的SQL
语句的id
、参数等信息。 - 输入参数映射。输入参数类型可以是
Map
、Lis
t等集合类型,也可以是基本数据类型和POJO
类型。 - 输出结果映射。输出结果类型可以是
Map
、List
等集合类型,也可以是基本数据类型和POJO
类型。
注: 后面会详细分析每一步骤的执行过程。