当前位置: 首页 > news >正文 MyBatis底层原理【源码运行时序图】 news 2025/8/8 4:53:36 MyBatis初始化流程🛷 以下代码为例🎉 🎇可对应源码阅读 MyBatis初始化流程✨ SqlSessionFactoryBuilderXMLConfigBuilderConfigurationDefaultSqlSessionFactory1、创建对象2、build(inputStream)3、创建解析器parser4、解析每一个标签把详细信息保存在Configuration中5、解析mapper.xml6、返回Configuration7、build(Configuration)8、new DefaultSqlSessionFactory(config)9、返回创建的DefaultSqlSessionFactory,包含了保存全局配置信息的ConfigurationSqlSessionFactoryBuilderXMLConfigBuilderConfigurationDefaultSqlSessionFactoryMyBatis初始化流程 Mapper.xml中的每一个元素信息解析出来并保存在全局配置中,讲增删改查标签每一个属性解析出来封装成一个MappedStatement;一个MappedStatement就代表一个增删改查标签的详细信息 获取SqlSession流程🪁 DefaultSqlSessionFactoryConfigurationExecutor1、openSession()2、openSessionFromDataSource()3、获取一些信息,创建tx4、newExecutor()5、根据参数,选择合适的Executor实现6、如果开启了二级缓存,则创建CachingExecutor二级缓存默认为true,所以这里会创建CachingExecutor,此处使用了装饰器模式7、遍历所有拦截器,代理exceutorexecutor = (Executor) interceptorChain.pluginAll(executor)返回根据配置创建的Executor对象创建并返回DefaultSqlSessionDefaultSqlSession中包含了Executor和ConfigurationDefaultSqlSessionFactoryConfigurationExecutor获取SqlSession流程 获取Mapper代理对象🎿 DefaultSqlSessionConfigurationMapperRegistryMapperProxyFactoryMapperProxy1、getMapper()2、getMapper()3、getMapper4、查找指定type对应的MapperProxyFactory对象5、newInstance(sqlSession)6、创建实现了mapperInterface接口的代理对象创建MapperProxy,他是一个 InvocationHandler,JDK动态代理核 心对象7、返回MapperProxy代理对象返回DefaultSqlSessionConfigurationMapperRegistryMapperProxyFactoryMapperProxy获取Mapper代理对象 执行流程🎄 MapperProxyMapperMethodDefaultSqlSessionExecutorCachingExecutorBaseExecutorSimpleExecutorStatementHandlerinvoke()判断增删改查类型包装参数为map集合sqlSession.selectOne()selectList()获取MappedStatementMappedStatement中包含了方法对应的标签详细信息,包含了SQL的信息executor.query()获取BoundSql对象query()检查是否使用了二级缓存如果存在二级缓存,则返回缓存中信息如果不存在缓存,则调用被装饰的Executor执行query()检查本地缓存(一级缓存)localCache存在本地缓存(一级缓存)获取缓存中保存的输出类型参数,并设置到用户传入的实参(parameter)对象中没有本地缓存则调用queryFromDatabase(),查询后也会放到一级缓存中调用doQuery()方法,完成数据库查询操作,并返回结果对象创建StatementHandler对象创建StatementHandler此处会遍历是否有拦截器存在,interceptorChain.pluginAll()prepareStatement()完成Statement的创建和初始化与处理占位符预编译sql产生PreparedStatementHandler对象调用StatementHandler设置参数调用TypeHandler给预编译SQL设置参数查出数据使用ResultSetHandler处理结果;使用TypeHandler获取value值后续关闭连接等操作返回数据MapperProxyMapperMethodDefaultSqlSessionExecutorCachingExecutorBaseExecutorSimpleExecutorStatementHandler获取Mapper代理对象 查看全文 http://www.lryc.cn/news/27855.html 相关文章: k8s 系列之 CoreDNS 解读 从测试鸡蛋硬度到跳表的设计 3D立体视觉成像原理介绍【一 】 CEC2021:鱼鹰优化算法(Osprey optimization algorithm,OOA)求解CEC2021(提供MATLAB代码 0301_对应的南京比特物联网 钡铼技术BL302 ARM工控机QT图形化界面开发的实践 Python try except异常处理详解(入门必读) 信息系统基本知识(三)软件工程 Linux下软件部署安装管理----rpmbuild打包rpm包部署安装 ThreadLocal学会了这些,你也能和面试官扯皮了! 【存储】存储特性 Qt使用OpenGL进行多线程离屏渲染 Vue基础入门讲义(三)-指令 pod资源限制,探针(健康检查) Python | 蓝桥杯进阶第一卷——字符串 2023-03-03 mysql列存储-cpu占用100%-追踪思路 JVM—类加载子系统 在codeIgniter3中session.php中的数组追加值 Windows环境下Gpu版本的Pytorch安装 项目实战典型案例13——学情页面逻辑问题 工作日志day02 C++Primer16.1.6节练习 初尝并行编程 keepalived学习记录:对其vip漂移过程采用gdb跟踪 51单片机串口通讯原理及程序源码-----day8 mongodb入门到使用(下) 云HIS系统源码 医院his源码 云his源码 朴素贝叶斯法学习笔记 vscode与C++安装与使用【不好用来骂我】 C++11使用多线程(线程池)计算相似度实现性能优化
MyBatis初始化流程🛷 以下代码为例🎉 🎇可对应源码阅读 MyBatis初始化流程✨ SqlSessionFactoryBuilderXMLConfigBuilderConfigurationDefaultSqlSessionFactory1、创建对象2、build(inputStream)3、创建解析器parser4、解析每一个标签把详细信息保存在Configuration中5、解析mapper.xml6、返回Configuration7、build(Configuration)8、new DefaultSqlSessionFactory(config)9、返回创建的DefaultSqlSessionFactory,包含了保存全局配置信息的ConfigurationSqlSessionFactoryBuilderXMLConfigBuilderConfigurationDefaultSqlSessionFactoryMyBatis初始化流程 Mapper.xml中的每一个元素信息解析出来并保存在全局配置中,讲增删改查标签每一个属性解析出来封装成一个MappedStatement;一个MappedStatement就代表一个增删改查标签的详细信息 获取SqlSession流程🪁 DefaultSqlSessionFactoryConfigurationExecutor1、openSession()2、openSessionFromDataSource()3、获取一些信息,创建tx4、newExecutor()5、根据参数,选择合适的Executor实现6、如果开启了二级缓存,则创建CachingExecutor二级缓存默认为true,所以这里会创建CachingExecutor,此处使用了装饰器模式7、遍历所有拦截器,代理exceutorexecutor = (Executor) interceptorChain.pluginAll(executor)返回根据配置创建的Executor对象创建并返回DefaultSqlSessionDefaultSqlSession中包含了Executor和ConfigurationDefaultSqlSessionFactoryConfigurationExecutor获取SqlSession流程 获取Mapper代理对象🎿 DefaultSqlSessionConfigurationMapperRegistryMapperProxyFactoryMapperProxy1、getMapper()2、getMapper()3、getMapper4、查找指定type对应的MapperProxyFactory对象5、newInstance(sqlSession)6、创建实现了mapperInterface接口的代理对象创建MapperProxy,他是一个 InvocationHandler,JDK动态代理核 心对象7、返回MapperProxy代理对象返回DefaultSqlSessionConfigurationMapperRegistryMapperProxyFactoryMapperProxy获取Mapper代理对象 执行流程🎄 MapperProxyMapperMethodDefaultSqlSessionExecutorCachingExecutorBaseExecutorSimpleExecutorStatementHandlerinvoke()判断增删改查类型包装参数为map集合sqlSession.selectOne()selectList()获取MappedStatementMappedStatement中包含了方法对应的标签详细信息,包含了SQL的信息executor.query()获取BoundSql对象query()检查是否使用了二级缓存如果存在二级缓存,则返回缓存中信息如果不存在缓存,则调用被装饰的Executor执行query()检查本地缓存(一级缓存)localCache存在本地缓存(一级缓存)获取缓存中保存的输出类型参数,并设置到用户传入的实参(parameter)对象中没有本地缓存则调用queryFromDatabase(),查询后也会放到一级缓存中调用doQuery()方法,完成数据库查询操作,并返回结果对象创建StatementHandler对象创建StatementHandler此处会遍历是否有拦截器存在,interceptorChain.pluginAll()prepareStatement()完成Statement的创建和初始化与处理占位符预编译sql产生PreparedStatementHandler对象调用StatementHandler设置参数调用TypeHandler给预编译SQL设置参数查出数据使用ResultSetHandler处理结果;使用TypeHandler获取value值后续关闭连接等操作返回数据MapperProxyMapperMethodDefaultSqlSessionExecutorCachingExecutorBaseExecutorSimpleExecutorStatementHandler获取Mapper代理对象 查看全文 http://www.lryc.cn/news/27855.html 相关文章: k8s 系列之 CoreDNS 解读 从测试鸡蛋硬度到跳表的设计 3D立体视觉成像原理介绍【一 】 CEC2021:鱼鹰优化算法(Osprey optimization algorithm,OOA)求解CEC2021(提供MATLAB代码 0301_对应的南京比特物联网 钡铼技术BL302 ARM工控机QT图形化界面开发的实践 Python try except异常处理详解(入门必读) 信息系统基本知识(三)软件工程 Linux下软件部署安装管理----rpmbuild打包rpm包部署安装 ThreadLocal学会了这些,你也能和面试官扯皮了! 【存储】存储特性 Qt使用OpenGL进行多线程离屏渲染 Vue基础入门讲义(三)-指令 pod资源限制,探针(健康检查) Python | 蓝桥杯进阶第一卷——字符串 2023-03-03 mysql列存储-cpu占用100%-追踪思路 JVM—类加载子系统 在codeIgniter3中session.php中的数组追加值 Windows环境下Gpu版本的Pytorch安装 项目实战典型案例13——学情页面逻辑问题 工作日志day02 C++Primer16.1.6节练习 初尝并行编程 keepalived学习记录:对其vip漂移过程采用gdb跟踪 51单片机串口通讯原理及程序源码-----day8 mongodb入门到使用(下) 云HIS系统源码 医院his源码 云his源码 朴素贝叶斯法学习笔记 vscode与C++安装与使用【不好用来骂我】 C++11使用多线程(线程池)计算相似度实现性能优化