SqlSession构建流程

  • MyBatis
    • SqlSession构建流程
    • 与我联系

MyBatis

本文是对mybatis 3.x源码深度解析与最佳实践学习的总结,包括XML文件解析流程SqlSession构建流程CRUD执行流程MyBatis扩展点,以及针对面试题进行源码分析。

mybatis 3.x源码深度解析与最佳实践下载:https://download.csdn.net/download/u013425841/12816685

SqlSession构建流程

MyBatis执行的基本流程大致可以分四个步骤:

  1. 使用Resources类加载Mybatis的Xml配置文件
  2. 使用SqlSessionFactoryBuilder构建SqlSessionFactory对象
  3. 使用SqlSessionFactory对象调用openSession获取SqlSession
  4. 使用SqlSessioon对象调用select\update\delete等方法进行操作
public static void main(String[] args) {try {Reader reader;// 1.加载mybatis configuration配置文件String resource = "Configuration.xml";reader = Resources.getResourceAsReader(resource);// 2.使用SqlSessionFactoryBuilder构建SqlSessionFactory对象SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);// 3.构建SqlSession对象SqlSession session = sessionFactory.openSession();try {//4.执行数据库查询User user = (User) session.selectOne("com.mybatis.source.mapper.UserMapper.getUser", 1);System.out.println(user.getAge() + "," + user.getName());} finally {session.close();}} catch (IOException e) {e.printStackTrace();}

今天重点分析SqlSession的构建流程,主要对应代码

  1. SqlSession session = sessionFactory.openSession();

进入源码分析:

  1. 首先调用openSession方法, 内部调用openSessionFromDataSource方法

  2. getTransactionFactoryFromEnvironment()方法的作用:
    根据环境配置选择事物管理器工厂,本文配置的是JDBC,所以使用的是JdbcTransactionFactory.

  3. 通过事物管理器工厂newTransaction方法,获取JdbcTransaction事物管理器,底层使用Connection进行事物commit和rollback

  4. 接下来获取执行器,configuration.newExecutor(tx, execType);

    MyBatis一共4选择器,分别是BatchExecutor、ReuseExecutor、SImpleExecutor、CachingExecutor

BatchExecutor:

  1. 批量执行器,BatchExecutor使用PreparedStatement的addBatch方法批量添加sql语句,之后使用executeBatch一次性提交缓存的sql语句,提高了处理性能.
    BatchExecutor处理器,当执行的sql语句是同一个,会像ReuseExecutor处理一样,复用Statement预处理对象,提高性能

ReuseExecutor:

  1. 复用Statement预处理对象,性能比SimpleExecutor好

SImpleExecutor:

  1. 简单执行器,没有特别处理,每次开启新的Statement,默认是SimpleExecutor

CachingExecutor:

  1. 缓存执行器,当开启二级缓存会使用该执行器,CachingExecutor并没有直接继承BaseExcutor,而且通过委托的方式使用上面的执行器去处理逻辑,CachingExecutor则主要关注二级缓存的实现逻辑

  2. 开启二级缓存的方式

    接下来就是执行器的代理创建:
    interceptorChain.plugin(executor)方法最终会调用到wrap方法,进行代理创建


我们熟知的PageHelper就是通过实现拦截器,动态拦截sql达到语句的修改

至此openSession的逻辑就结束了,包装到DefaultSqlSession返回

与我联系

Java/一对一零基础辅导/公司项目一对一辅导/日常Bug解决/代码讲解/毕业设计等 微信:study_51ctofx

2.MyBatis源码解析-SqlSession构建流程--阿呆中二相关推荐

  1. 3.MyBatis源码解析-CRUD执行流程--阿呆中二

    CRUD执行流程 MyBatis CRUD执行流程 与我联系 MyBatis 本文是对mybatis 3.x源码深度解析与最佳实践学习的总结,包括XML文件解析流程.SqlSession构建流程.CR ...

  2. 【MyBatis源码解析】MyBatis一二级缓存

    MyBatis缓存 我们知道,频繁的数据库操作是非常耗费性能的(主要是因为对于DB而言,数据是持久化在磁盘中的,因此查询操作需要通过IO,IO操作速度相比内存操作速度慢了好几个量级),尤其是对于一些相 ...

  3. mybatis源码解析(一)

    Mybatis 源码解析 (一) 一. ORM框架的作用 实际开发系统时,我们可通过JDBC完成多种数据库操作.这里以传统JDBC编程过程中的查询操作为例进行说明,其主要步骤如下: (1)注册数据库驱 ...

  4. 对标阿里P8的MyBatis源码解析文档,面试/涨薪两不误,已献出膝盖

    移动互联网的特点是大数据.高并发,对服务器往往要求分布式.高性能.高灵活等,而传统模式的Java数据库编程框架已经不再适用了. 在这样的背景下,一个Java的持久框架MyBatis走入了我们的世界,它 ...

  5. Mybatis源码解析《二》

    导语 在前一篇文章Mybatis源码解析<一>中,已经简单了捋了一下mybatis核心文件和mapper配置文件的一个基本的解析流程,这是理解mybatis的基本,和spring中的配置文 ...

  6. Mybatis源码解析(一):环境搭建

    Mybatis源码系列文章 手写源码(了解源码整体流程及重要组件) Mybatis源码解析(一):环境搭建 Mybatis源码解析(二):全局配置文件的解析 Mybatis源码解析(三):映射配置文件 ...

  7. mybatis源码解析1_sessionFactory

    注 一下内容都是根据尚硅谷2018年mybatis源码解析做的课程笔记,视频链接: https://www.bilibili.com/video/BV1mW411M737?p=74&share ...

  8. Retrofit2源码解析——网络调用流程(下)

    Retrofit2源码解析系列 Retrofit2源码解析(一) Retrofit2源码解析--网络调用流程(上) 本文基于Retrofit2的2.4.0版本 implementation 'com. ...

  9. android 输入法如何启动流程_android输入法02:openwnn源码解析01—输入流程

    android 输入法 02:openwnn 源码解析 01-输入流程 之后要开始 android 日文输入法的测试,因此现在开始研究 android 输入法.之前两 篇文章已经对 android 自 ...

最新文章

  1. 计算机会计课程试题及答案,计算机会计第2次作业_报表_附答案
  2. android 在 ListView 的 item 中插入 GridView 仿微信朋友圈图片显示。
  3. 题目1176:树查找
  4. CheckFail设计很垃圾
  5. mysql导出d盘_mysql 导出导入数据库
  6. 网页爬虫的设计与实现(Java版)
  7. 算法工程师面试题【集锦cv/ml/dl】
  8. 2017.3.25 SJY摆石子 思考记录
  9. android网页接口实现方法,Android 程序员搞 web 之 webApi (十 四)
  10. hive中groupby优化_hivesql : hive.groupby.skewindata 和hive.map.aggr 组合的坑
  11. Dymola-多学科系统仿真工具
  12. Linux audit详解
  13. 纯干货,PSI 原理解析与应用
  14. 闪迪u盘不能识别好办法_SanDisk U盘无法识别解决
  15. Java测试工程师技术面试题库【持续补充更新】
  16. RStudio用不了怎么办?
  17. 淘宝开放平台订单接口
  18. StringBuffer是安全的吗?
  19. java+vue3实现生成、验证图形验证码,和手机短信验证码
  20. 2023AIGC产业发展及应用白皮书.pdf(附下载链接)

热门文章

  1. Openssl Aes加解密使用示例
  2. 【改】[火光摇曳]神奇的伽玛函数(下)——markdown排版
  3. 点菜系统服务器,电子菜谱点菜系统
  4. GIS基础(5)空间拓扑
  5. 云脑启智 开源赋能|2021新一代人工智能院士高峰论坛暨启智开发者大会即将开幕
  6. Mybatis(一)——【快速入门、增删查改操作、核心配置文件描述及API】
  7. 新浪微博终于完成多数ui
  8. 基本数据类型 int操作 bool布尔操作 str字符串操作 for in 循环
  9. 奥运会运动项目名称汇总
  10. 929. 独特的电子邮件地址(简单,字符串)(12.20)