Mybatis 3.X框架-Mybatis源码分析

核心对象的生命周期

核心对象生命周期描述
SqlSessionFactoryBuilder方法局部只需要使用一次,用于构建SqlSessionFactory
SqlSessionFactory应用级别全局单例,SqlSession工厂
SqlSession会话级别每次访问DB都需要使用SqlSession
Mapper方法级别每次从SqlSession获取实例(实际是MapperProxy代理对象)

工作流程及源码解读

  • (1) 解析配置文件,创建全局Configuration(全局只执行一次)
    • (1.1) 解析mapper.xml,生成对应的MapperStatement和MapperProxyFactory(每个Mapper.xml都是独立的)
  • (2) 创建SqlSessionFactory(全局只执行一次)
  • (3) 创建SqlSession(每当操作数据库时创建)
    • (3.1) 同时创建Executor(默认Simple),二级缓存通过装饰器CachingExecutor包装Executor,并且interceptorChain创建executor代理。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
  • (4)获取Mapper(实际上是MapperProxy代理)
    • (4.1) MapperRegistry是全局解析Configuration成员属性,knowMappers为mapper.xml解析得到的namespace即MapperProxyFactory工厂类;Mapper实际是MapperProxy的jdk代理类在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
  • (5) 调用Mapper接口方法(操作数据库)
    • (5.1) 调用Mapper接口方法实际上执行MapperProxy的代理类invoke方法在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    • (5.2) 查询Query操作
      • (5.2.1) 根据不同的结果类型,执行不同的方法;以returnsMap为例在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
      • (5.2.2) 调用Executor执行器负责核心操作;一级缓存LocalCache:PerpetualCache真面目;CacheKey组成部分;在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
      • (5.2.3) 创建StatementHandlder,并且用interceptorChain创建其代理;默认StatementType为PREPARED在这里插入图片描述
        在这里插入图片描述
      • (5.2.4) StatementHandlder构造方法同时创建parameterHandler,resultSetHandler;在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
      • (5.2.5) StatementHandler预编译动态SQL在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
      • (5.2.6) StatementHandler调用paramterHandler设置参数在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        • (5.2.7) StatementHandler执行真正的query操作在这里插入图片描述
          在这里插入图片描述
        • (5.2.8) 调用resultHandler处理结果集在这里插入图片描述
          在这里插入图片描述

核心流程调用链

1 获取SqlSession会话
  • SqlSession持有Configuration,可获取全局配置信息
  • 持有Executor,一级缓存就在Executor实现的。
    在这里插入图片描述
  • DefaultSqlSessionFactory,Configuration,MapperRegistry,MapperProxyFactory 都是全局单例,在解析Mybatis配置时创建;
  • 每一个Mapper.xml都被解析并创建对应的MapperProxyFactory, 保存在Configuration中;
    在这里插入图片描述
2 执行查询操作
  • 查询操作 ,可被插件代理有6处地方,已在序列图备注;
    在这里插入图片描述
四大对象生命周期
对象生命周期
Executor会话级别
StatementHandlerSqlSession方法级别
ParameterHandlerSqlSession方法级别
ResultSetHandlerSqlSession方法级别
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值