MyBatis 入门系列【16】 工作原理

32 阅读2分钟

1. 功能架构

Mybatis的功能架构分为以下几层:

  1. API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层接收到调用请求就会调用数据处理层来完成具体的数据处理。

  2. 数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。

  3. 基础支撑层:负责最基础的功能支撑,包括使用XML或者JAVA代码方式构建及配置Mybatis,以及连接管理、事务管理、配置加载和缓存处理。最基础的公共组件,为上层的数据处理层提供最基础支撑。

image.png

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();

其核心执行流程如图所示:

image.png

流程说明

  1. 读取MyBatismybatis-config.xml全局配置文件。
  2. 加载Mapper映射文件。
  3. 通过MyBatis的环境配置信息构造SqlSessionFactory会话工厂。
  4. 会话工厂创建SqlSession对象,该对象中包含了执行SQL语句的所有方法。
  5. Executor执行器根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护。
  6. Executor接口的执行方法中有一个MappedStatement类型的参数,该参数是对映射信息的封装,用于存储要映射的SQL语句的id、参数等信息。
  7. 输入参数映射。输入参数类型可以是MapList等集合类型,也可以是基本数据类型和POJO类型。
  8. 输出结果映射。输出结果类型可以是MapList等集合类型,也可以是基本数据类型和POJO类型。

注: 后面会详细分析每一步骤的执行过程。