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、List等集合类型,也可以是基本数据类型和POJO类型。 - 输出结果映射。输出结果类型可以是
Map、List等集合类型,也可以是基本数据类型和POJO类型。
注: 后面会详细分析每一步骤的执行过程。