写点什么

Myabtis 源码分析六 - 代理对象 Mapper 的创建流程分析,死锁全详解,一文带你搞定

作者:Java高工P7
  • 2021 年 11 月 10 日
  • 本文字数:1333 字

    阅读完需:约 4 分钟

?2、SqlSessionFactory


二、binding 模块分析


1、bindling模块介绍


2、bindling模块核心类


[3、binding 模块运行流程](about:bla


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


nk#3%E3%80%81binding%20%E6%A8%A1%E5%9D%97%E8%BF%90%E8%A1%8C%E6%B5%81%E7%A8%8B "3、binding 模块运行流程")




//--------------------第二部,创建代理对象---------------------------


// 2.获取 sqlSession


SqlSession sqlSession = sqlSessionFactory.openSession();


// 3.获取对应 mapper


TUserMapper mapper = sqlSession.getMapper(TUserMapper.class);


从上篇我们知道,整个 mybtais 的使用主要分为三个阶段,那么第二个阶段就是?MyBatis 最神秘的阶段,要理解它,就需要对 Mybatis 的接口层和 binding 模块数据源模块进行深入的学习;


一、Mybatis 的接口层


==============


1、SqlSession 介绍




第二个阶段使用到的第一个对象就是 SqlSession,SqlSession 是 MyBaits 对外提供的最关


键的核心接口,通过它可以执行数据库读写命令、获取映射器、管理事务等;SqlSession 也


意味着客户端与数据库的一次连接,客户端对数据库的访问请求都是由 SqlSession 来处理的,


SqlSession 由 SqlSessionFactory 创建,每个 SqlSession 都会引用 SqlSessionFactory 中全局唯一单例存在的 configuration 对象;如下图所示:



要 深 入 理 解 SqlSession 就 得 深 入 到 源 码 进 行 学 习 , SqlSession 默 认 实 现 类 为


org.apache.ibatis.session.defaults.DefaultSqlSession,解读如下:


  1. SqlSession 是 MyBatis 的门面,是 MyBatis 对外提供数据访问的主要 API,实例代码:com.enjoylearning.mybatis.MybatisDemo.originalOperation()?

  2. 实际上 Sqlsession 的功能都是基于 Executor 来实现的,遵循了单一职责原则,例如在 SqlSession 中的各种查询形式,最终会把请求转发到 Executor.query 方法,如下图所示:



2、SqlSessionFactory




SqlSessionFactory 使用工厂模式创建 SqlSession ,其默认的实现类为 DefaultSqlSessionFactory , 其 中 获 取 SqlSession 的 核 心 方 法 为 openSessionFromDataSource(ExecutorType, TransactionIsolationLevel, boolean),在这个方法中从 configuration 中获取的 TransactionFactory 是典型的策略模式的应用。运行期,TransactionFactory 接口的实现,是由配置文件配置决定的,可配置选项包括:JDBC、Managed,可根据需求灵活的替换 TransactionFactory 的实现;配置文件截图如下:



二、binding 模块分析


===============


1、bindling 模块介绍




上面提到 SqlSession 是 MyBatis 对外提供数据库访问最主要的 API,但是因为直接使用


SqlSession 进行数据库开发存在代码可读性差、可维护性差的问题,所以我们很少使用,而


是使用 Mapper 接口的方式进行数据库的开发。表面上我们在使用 Mapper 接口编程,实际


上 MyBatis 的内部,将对 Mapper 接口的调用转发给了 SqlSession,这个请求的转发是建立在


配置文件解读、动态代理增强的基础之上实现的,实现的过程有三个关键要素:


  • 找到 SqlSession 中对应的方法执行;

  • 找到命名空间和方法名(两维坐标)

  • 传递参数


要实现上述的步骤,必须对 bindling 模块有深入的分析;


2、bindling 模块核心类

用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
Myabtis源码分析六-代理对象Mapper的创建流程分析,死锁全详解,一文带你搞定