mybatis的执行过程深度分析

一.mybatis的作用

大家都懂的

二.spring项目中使用mybatis

1.需依赖的maven包

这里写图片描述
2.如何使用

大家都会
使用mybatis-generator-core.jar以及configfile生成对应的文件,包括
xxxEntity, xxxExample,xxxMapper,xxxMapper.xml。
使用注意点:
确保xxxMapper.xml中的namespace和sql id 同 xxxMapper路径和方法名保持一致对应。

三.spring - mybatis 框架的执行过程

1.sqlSessionFactory启动初始化
这里写图片描述
说明:
SqlSessionFactoryBean 负责构建Configuration,收集各种配置信息,包括各种xxxMapper.xml以及datasource,plugins等。
SqlSessionFactoryBuild利用configuration生成sqlSessionFactory,并有spring容器托管;
主要源码:
SqlSessionFactoryBean中buildSqlSessionFactory的过程
这里写图片描述
configuration中关键的mappedStatements
这里写图片描述

2.xxxMapper 接口的实现类
这里写图片描述

其中SqlSessionTemplate是spring-mybatis的核心,实现了SqlSession接口。
SqlSessionTemplate调用getMapper方法,通过configuration对象,传递给MapperProxyFactory,创建MapperProxy对象,即为xxxMapper接口的实现代理实现类。
主要源码:
MapperRegistry调用MapperProxyFactory
这里写图片描述

MapperProxyFactory执行过程
这里写图片描述

SqlSessionTemplate实例
这里写图片描述

3.CRUD操作这里写图片描述

以xxxMapper.selectByExample()方法调用为例,方法被拦截,进行代理类的invoke方法
这里写图片描述

接下来交给mapperMethod处理
这里写图片描述

SqlCommand里面存储了本次操作的MapperStatement,通过反射,查询configuration的mapperStatements表获得。

mapperMethod交给sqlSessionTemplate处理,sqlSessionTemplate调用统一的代理方法,然后交给DefaultSqlSession处理,
这里写图片描述

DefaultSqlSession交给CachingExecutor处理,CachingExecutor再交给BaseExecutor处理(先查缓存,再查数据库)
这里写图片描述

最后交给SimpleExecutor,执行jdbc操作
这里写图片描述

四.mybatis的事务管理

mybatis本身的事务工厂有两种类型
JdbcTransactionFactory 和 ManagedTransactionFactory,分别创建JdbcTransaction
和ManagedTransaction事务。
JdbcTransaction完成事务的创建提交回滚
而ManagedTransaction啥事情都不做,把事务处理的权限交给上层调用方法,比如我们经常使用编程式事务transactionTemplate或者声明式事务@Transactional

但spring项目有他自己的事务,SpringManagedTransactionFactory和SpringManagedTransaction,基本也不做什么事情,交给上层调用方法。

五.mybatis的缓存机制

分为一级缓存和二级缓存
一级缓存: sqlSession级别的。在CachingExecutor中处理
二级缓存:mapper级别的。在BaseExecutor中处理

再进行过insert,update,delete操作后,缓存失效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值