一、配置解析过程

  • 解析 MyBatis 配置文件
    首先通过创建 SqlSessionFactoryBuilder 对象的 build() 方法来创建 SqlSessionFactory对象, 其中用 XMLConfigBuilder 读取并解析 MyBatis 配置文件读取各个标签的属性封装成 Configuration 对象.

    在解析 mapper.xml 的时候, 主要做了两个事情:

    • (1) 将 mapper.xml 文件中的 '增删改查' 语句封装成 MappedStatment 对象;
    • (2) 将 mapper 接口文件 与 MapperProxyFactory[用于后面创建mapper代理对象] 对象相关联;

    最后返回一个默认的 DefaultSqlSessionFactory 对象.

二、SqlSession 的创建过程

  • SqlSession 的实现类是什么?
    默认是 DefaultSqlSession.
  • 其他还创建了什么对象?
    创建 SqlSession 时还通过事务工厂创建了 事务对象Executor对象( SIMPLE/REUSE/BATCH 默认为SIMPLE, 当二级缓存开关打开时, 会封装成 CachingExecutor )

    • SimpleExecutor:
      默认的执行器, 根据对应的sql直接执行即可, 不会做一些额外的操作.
    • BatchExecutor:
      通过批量操作来优化性能的执行器.
    • ReuseExecutor:
      可重用的执行器, 重用对象是Statement, 该执行器会缓存同一个sql的Statement, 省去Statement的重新创建, 优化性能.

三、Mapper 对象

  1. Mapper 对象是什么对象?
    mapper 对象是一个JDK动态代理对象.
  2. 为什么要从 SqlSession 里面去获取?
  3. 为什么传进去一个接口, 然后还要用接口类型来接收?
    底层使用了JDK的动态代理, 给接口创建了一个代理对象.

四、执行 SQL

  1. 为什么 Mybatis 的动态代理不需要实现类?
  2. 接口没有实现类, 调用的是什么方法?
  3. 接口方法怎么找到要执行的 SQL ?
  4. 方法参数是怎么转换成 SQL 参数的?
  5. 结果集怎么转换成对象?

五、Mybatis 核心对象

Configuration 
SqlSession 
Executor 
MapperProxy 
StatementHandler 
ParameterHandler 
ResultSetHandler 
MappedStatement 
MapperMethod 
SqlSource 
BoundSql
最后修改:2022 年 06 月 23 日
如果觉得我的文章对你有用,请点个赞吧~