Skip to the content.

首页

MyBatis


半自动ORM

MyBatis在查询关联对象或关联集合对象时,需要手动编写 sql 来完成,所以称之为半自动 ORM 映射工具;

Hibernate属于全自动ORM映射工具,使用Hibernate查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。


Xml 映射文件

namespace为对应的Mapper接口的全限定名,每个sql语句都会被解析为一个MappedStatement对象,通过namespace加上sql语句id即是其key值,Mapper接口方法可以重载,但sql语句id无法重复。实现方式即是jdk动态代理,为Mapper接口生成代理对象,每个方法通过key值找到对应的MappedStatement对象并执行。


插件

Interceptor

拦截对象

【Executor】:执行器;【StatementHandler】:Statement处理;【ParameterHandler】:参数处理;【ResultSetHandler】:结果集处理。

执行顺序:Executor->StatementHandler->ParameterHandler->TypeHandler->ResultSetHandler->StatementHandler->Executor


缓存

均使用Executor实现,一级缓存为SqlSession级别,不同SqlSession之间隔离,默认开启不能关闭,由BaseExecutor实现,commit、rollback以及update方法都会清除缓存;二级缓存是Mapper级别,默认关闭,由CachingExecutor实现。

SqlSession

每次请求数据库会话都会创建SqlSession对象,每个事务都会创建一个SqlSession。Spring中如果未显式声明事务,则每次sql操作都相当于开启一个事务,即每次都会创建一个SqlSession。

Executor

SqlSessionFactory

用于创建SqlSession,SqlSession会从Configuration对象中获取对应MappedStatement,交给Executor执行。

MapperScannerConfigurer

用于获取MapperFactoryBean,然后为mapper接口创建代理。