MyBatis 原理

1 SqlSessionFactoryBuilder

build()-> 获得配置文件 、解析全局配置和映射器文件(若已解析不会重复解析) -> 返回配置文件-> 构建成功返回sqlSessionFactory

解析全局配置

A: properties标签解析(db.properties)
B: settings解析(核心行为空控制,解析和处理分开。先解析最后处理,因为中间过程会调用)
B (loadCustomVFS(加载本地或远程文件)- >loadCustomLogImpl->处理类型别名->插件解析(分页插件、SqlIntercetptor插件)
C:创建返回对象和查询对象
D:处理赋值settings标签参数(二级缓存、执行器等等)
E:environment (事务管理、数据源)
F:typeHandler
G:mapperElement(配置mapper映射器,可通过Packge、resource、url、class配置)

注 G 步骤:一次解析mapper文件的namespace- cache- parameterMap- resultMap-sql- CURD标签(放到MappedStatement中,所有处理后的SQL都在这里)

2 SqlSession session =sqlSessionFactory.openSession 创建会话

A 通过TransactionFactory和DataSource拿到environment 拿到事务源,创建事务
B 创建执行器

a 创建执行器,默认simpleExecutor(BatchExecutor\ReuseExecutor 会缓存到一个map中			),SimpleExecutor 使用后之间删除;
b 若开始二级缓存或默认二级缓存(开启),会用CachingExecutor包装执行器,否则走baseExecutor;
c 拦截器包装Executor,使用plaginAll 进行包装。

C return new DefaultSqlSession(config , executor, autoCommit)

3 sqlSession.getMapper(.class) 相当于拿到执行器

拿到一个接口类型和对应工厂类的map后,拿到接口类型对应工厂类,然后用JDK动态代理对接口进行代理,返回代理对象。

4 获得XXXMapper.方法名(参数)执行方法,并获取返回值。相当于执行器执行statement中的sql

选择调用sqlSession的方法, 执行selectOne(查询一个List,返回第一个结果,若查询到的是多个结果会报错),处理一级缓存,创建cacheKey,获取本地缓存,没有的话,查询数据库,存入本地缓存,使用默认SimpleExecutor执行器查询,进去JDBC步骤(

`a 获取configuration,其中有所有map映射文件信息, 
 b 创建statementHandler、parameterHandler、resultSetHandler
 c 创建connection 
 d 处理输入参数,处理sql ,执行sql ,得到结果集,处理输出结果。
  返回输出结果
   `
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值