2.MyBatis源码解析-SqlSession构建流程--阿呆中二
SqlSession构建流程
- MyBatis
- SqlSession构建流程
- 与我联系
MyBatis
本文是对mybatis 3.x源码深度解析与最佳实践学习的总结,包括XML文件解析流程、SqlSession构建流程、CRUD执行流程、MyBatis扩展点,以及针对面试题进行源码分析。
mybatis 3.x源码深度解析与最佳实践下载:https://download.csdn.net/download/u013425841/12816685
SqlSession构建流程
MyBatis执行的基本流程大致可以分四个步骤:
- 使用Resources类加载Mybatis的Xml配置文件
- 使用SqlSessionFactoryBuilder构建SqlSessionFactory对象
- 使用SqlSessionFactory对象调用openSession获取SqlSession
- 使用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的构建流程,主要对应代码
- SqlSession session = sessionFactory.openSession();
进入源码分析:
首先调用openSession方法, 内部调用openSessionFromDataSource方法
getTransactionFactoryFromEnvironment()方法的作用:
根据环境配置选择事物管理器工厂,本文配置的是JDBC,所以使用的是JdbcTransactionFactory.
通过事物管理器工厂newTransaction方法,获取JdbcTransaction事物管理器,底层使用Connection进行事物commit和rollback
接下来获取执行器,configuration.newExecutor(tx, execType);
MyBatis一共4选择器,分别是BatchExecutor、ReuseExecutor、SImpleExecutor、CachingExecutor
BatchExecutor:
- 批量执行器,BatchExecutor使用PreparedStatement的addBatch方法批量添加sql语句,之后使用executeBatch一次性提交缓存的sql语句,提高了处理性能.
BatchExecutor处理器,当执行的sql语句是同一个,会像ReuseExecutor处理一样,复用Statement预处理对象,提高性能
ReuseExecutor:
- 复用Statement预处理对象,性能比SimpleExecutor好
SImpleExecutor:
- 简单执行器,没有特别处理,每次开启新的Statement,默认是SimpleExecutor
CachingExecutor:
缓存执行器,当开启二级缓存会使用该执行器,CachingExecutor并没有直接继承BaseExcutor,而且通过委托的方式使用上面的执行器去处理逻辑,CachingExecutor则主要关注二级缓存的实现逻辑
开启二级缓存的方式
接下来就是执行器的代理创建:
interceptorChain.plugin(executor)方法最终会调用到wrap方法,进行代理创建
我们熟知的PageHelper就是通过实现拦截器,动态拦截sql达到语句的修改
至此openSession的逻辑就结束了,包装到DefaultSqlSession返回
与我联系
Java/一对一零基础辅导/公司项目一对一辅导/日常Bug解决/代码讲解/毕业设计等 微信:study_51ctofx
2.MyBatis源码解析-SqlSession构建流程--阿呆中二相关推荐
- 3.MyBatis源码解析-CRUD执行流程--阿呆中二
CRUD执行流程 MyBatis CRUD执行流程 与我联系 MyBatis 本文是对mybatis 3.x源码深度解析与最佳实践学习的总结,包括XML文件解析流程.SqlSession构建流程.CR ...
- 【MyBatis源码解析】MyBatis一二级缓存
MyBatis缓存 我们知道,频繁的数据库操作是非常耗费性能的(主要是因为对于DB而言,数据是持久化在磁盘中的,因此查询操作需要通过IO,IO操作速度相比内存操作速度慢了好几个量级),尤其是对于一些相 ...
- mybatis源码解析(一)
Mybatis 源码解析 (一) 一. ORM框架的作用 实际开发系统时,我们可通过JDBC完成多种数据库操作.这里以传统JDBC编程过程中的查询操作为例进行说明,其主要步骤如下: (1)注册数据库驱 ...
- 对标阿里P8的MyBatis源码解析文档,面试/涨薪两不误,已献出膝盖
移动互联网的特点是大数据.高并发,对服务器往往要求分布式.高性能.高灵活等,而传统模式的Java数据库编程框架已经不再适用了. 在这样的背景下,一个Java的持久框架MyBatis走入了我们的世界,它 ...
- Mybatis源码解析《二》
导语 在前一篇文章Mybatis源码解析<一>中,已经简单了捋了一下mybatis核心文件和mapper配置文件的一个基本的解析流程,这是理解mybatis的基本,和spring中的配置文 ...
- Mybatis源码解析(一):环境搭建
Mybatis源码系列文章 手写源码(了解源码整体流程及重要组件) Mybatis源码解析(一):环境搭建 Mybatis源码解析(二):全局配置文件的解析 Mybatis源码解析(三):映射配置文件 ...
- mybatis源码解析1_sessionFactory
注 一下内容都是根据尚硅谷2018年mybatis源码解析做的课程笔记,视频链接: https://www.bilibili.com/video/BV1mW411M737?p=74&share ...
- Retrofit2源码解析——网络调用流程(下)
Retrofit2源码解析系列 Retrofit2源码解析(一) Retrofit2源码解析--网络调用流程(上) 本文基于Retrofit2的2.4.0版本 implementation 'com. ...
- android 输入法如何启动流程_android输入法02:openwnn源码解析01—输入流程
android 输入法 02:openwnn 源码解析 01-输入流程 之后要开始 android 日文输入法的测试,因此现在开始研究 android 输入法.之前两 篇文章已经对 android 自 ...
最新文章
- 计算机会计课程试题及答案,计算机会计第2次作业_报表_附答案
- android 在 ListView 的 item 中插入 GridView 仿微信朋友圈图片显示。
- 题目1176:树查找
- CheckFail设计很垃圾
- mysql导出d盘_mysql 导出导入数据库
- 网页爬虫的设计与实现(Java版)
- 算法工程师面试题【集锦cv/ml/dl】
- 2017.3.25 SJY摆石子 思考记录
- android网页接口实现方法,Android 程序员搞 web 之 webApi (十 四)
- hive中groupby优化_hivesql : hive.groupby.skewindata 和hive.map.aggr 组合的坑
- Dymola-多学科系统仿真工具
- Linux audit详解
- 纯干货,PSI 原理解析与应用
- 闪迪u盘不能识别好办法_SanDisk U盘无法识别解决
- Java测试工程师技术面试题库【持续补充更新】
- RStudio用不了怎么办?
- 淘宝开放平台订单接口
- StringBuffer是安全的吗?
- java+vue3实现生成、验证图形验证码,和手机短信验证码
- 2023AIGC产业发展及应用白皮书.pdf(附下载链接)
热门文章
- Openssl Aes加解密使用示例
- 【改】[火光摇曳]神奇的伽玛函数(下)——markdown排版
- 点菜系统服务器,电子菜谱点菜系统
- GIS基础(5)空间拓扑
- 云脑启智 开源赋能|2021新一代人工智能院士高峰论坛暨启智开发者大会即将开幕
- Mybatis(一)——【快速入门、增删查改操作、核心配置文件描述及API】
- 新浪微博终于完成多数ui
- 基本数据类型 int操作 bool布尔操作 str字符串操作 for in 循环
- 奥运会运动项目名称汇总
- 929. 独特的电子邮件地址(简单,字符串)(12.20)