MyBatis本质、底层与执行流程
MyBatis执行流程
-
本质:反射机制实现MyBatis三大类的创建
-
底层:使用动态代理接管dao层接口操作
-
执行流程:MyBatis工具类 => 【MyBatisUtils】,按照【官方使用步骤】:
-
获取核心配置文件【mybatis-config.xml】中的配置
try{ // 指定配置文件路径 String resource = "mybatis-config.xml"; // 读取局部变量【resource】中的核心配置文件,并将其所有配置转化为input流 // getResourceAsStream需要try...catch InputStream inputStream = Resources.getResourceAsStream(resource); }catch(Exception e){ e.printStackTrace(); }
-
实例化SqlSessionFactoryBuilder构造器
// 调用SqlSessionFactoryBuilder()类的build()方法创建SqlSessionFactory对象 /* public class SqlSessionFactoryBuilder{ .. SqlSessionFactory build(InputStream inputStream) { return build(inputStream, null, null); } .. } */ SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
-
解析【1.获取核心配置文件中的配置】中配置好的文件解析流inputStream
// SqlSessionFactoryBuilder.build()重载 public SqlSessionFactory build(InputStream inputStream) { return build(inputStream, null, null); } // SqlSessionFactoryBuilder.build()终会执行该build()方法: // XMLConfigBuilder.parse()完成对核心配置文件的解析 public SqlSessionFactory build(Reader reader, String environment, Properties properties) { try { XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties); return build(parser.parse()); } catch (Exception e) { throw ExceptionFactory.wrapException("Error building SqlSession.", e); } finally { ErrorContext.instance().reset(); try { reader.close(); } catch (IOException e) { // Intentionally ignore. Prefer previous error. } } }
-
实例化一个【按1.配置核心配置文件】的DefaultSqlSessionFactory
// 使用Configuration类存放所有XML配置信息,并传递给SqlSessionFactory对象 public SqlSessionFactory build(Configuration config) { return new DefaultSqlSessionFactory(config); }
- 创建SqlSession对象
-
创建executor执行器
- delegate = (SimpleExecutor)
- tcm = (TranscationalCacheManager)
- transcationalCache
- autoCommit = true | false
- dirty = true | false
- cursorList = null
-
完成CRUD操作
-
判断事务
- 成功提交
- 失败回滚executor
-
作者:Cn_FallTime
出处:https://www.cnblogs.com/CnFallTime/p/16032265.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~