Mybatis运行原理-为Mybatis插件开发打基础

视频地址https://www.bilibili.com/video/BV1bb411A7bD?p=71

分层框架
在这里插入图片描述

老师的代码
在这里插入图片描述在这里插入图片描述

流程
1.获取sqlsessionFactory对象

将mybatis-config.xml的信息,写入类Configuration
MapperRegistry类将mapper接口与代理工厂绑定,每个接口对应一个工厂
Map<Class<?>, MapperProxyFactory<?>>
将所有的mapper.xml中的crud解析放入类MappedStatement(一个MappedStatement对应一个crud标签信息,sql语句也在,其中id属性是全类名+方法名,所以mybatsi的mapper不支持方法的重载)
Configuration还包含了属性Map<String,MappedStatement> (map的key就是MappedStatement的ID属性),也包含了一个MapperRegistry属性
所以Configuration包含了mybatis的所有配置
使用接口sqlsessionFactory的实现类DefaultSqlSessionFactory创建sqlsessionFactory对象
DefaultSqlSessionFactory对象包含Configuration属性

在这里插入图片描述

2.获取sqlsession对象

调用DefaultSqlSessionFactory的opensession方法
DefaultSqlSessionFactory包含了Configuration
创建了事务
调用了Configuration的newExecutor方法获取四大对象之一Executor,入参为事务,Executor的类型默认simple(ExecutorType简单的SIMPLE,可复用的REUSE,批量的REUSE)
如果开启二级缓存cacheEnabled,就创建executor = new CachingExecutor(executor);
最后调用interceptorChain拦截器链重新包装并返回executor = (Executor) interceptorChain.pluginAll(executor);
最终将Executor和Configuration放入DefaultSqlSession

在这里插入图片描述

3.获取接口代理对象(mapperProxy)
DefaultSqlSession的getMapper方法
configuration.getMapper(type, this);
mapperRegistry.getMapper(type, sqlSession);
根据接口类型获取MapperProxyFactory
调用MapperProxyFactory的newInstance将sqlSession传入
类MapperProxy包含属性sqlSession,mapper接口,以及接口的方法
最终返回MapperProxy的代理对象包含了DefaultSqlSession
在这里插入图片描述
4.执行crud方法

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值