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

2024-09-07 10:58

本文主要是介绍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执行的基本流程大致可以分四个步骤:

  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构建流程--阿呆中二的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144875

相关文章

Git打标签从本地创建到远端推送的详细流程

《Git打标签从本地创建到远端推送的详细流程》在软件开发中,Git标签(Tag)是为发布版本、标记里程碑量身定制的“快照锚点”,它能永久记录项目历史中的关键节点,然而,仅创建本地标签往往不够,如何将其... 目录一、标签的两种“形态”二、本地创建与查看1. 打附注标http://www.chinasem.cn

Nginx屏蔽服务器名称与版本信息方式(源码级修改)

《Nginx屏蔽服务器名称与版本信息方式(源码级修改)》本文详解如何通过源码修改Nginx1.25.4,移除Server响应头中的服务类型和版本信息,以增强安全性,需重新配置、编译、安装,升级时需重复... 目录一、背景与目的二、适用版本三、操作步骤修改源码文件四、后续操作提示五、注意事项六、总结一、背景与

Docker多阶段镜像构建与缓存利用性能优化实践指南

《Docker多阶段镜像构建与缓存利用性能优化实践指南》这篇文章将从原理层面深入解析Docker多阶段构建与缓存机制,结合实际项目示例,说明如何有效利用构建缓存,组织镜像层次,最大化提升构建速度并减少... 目录一、技术背景与应用场景二、核心原理深入分析三、关键 dockerfile 解读3.1 Docke

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

mybatis-plus如何根据任意字段saveOrUpdateBatch

《mybatis-plus如何根据任意字段saveOrUpdateBatch》MyBatisPlussaveOrUpdateBatch默认按主键判断操作类型,若需按其他唯一字段(如agentId、pe... 目录使用场景方法源码方法改造首先在service层定义接口service层接口实现总结使用场景my