• 文章
  • 在线工具

Mybatis源码详细解析及类流程图

Mybatis源码 Mybatis类流程图 热门
2 1034
  • Mybatis解析流程:
先大致看一下图,然后在细化看源代码更有利于理解。

高清图片下载地址:https://www.jinmingyz.com/software/file/download?id=e3df695276d04203b53476bbe3ceda03


Mybatis大致流程图:



1. SqlSessionFactoryBean

1)初始化准备工作,加载配置文件,注入Mapper映射器等

2ConfigMapperXML

2.    SqlSessionFactory SqlSessionTemplate

1DefaultSqlSessionFactory单例,创建SqlSession的工厂

3.    SqlSession

1)会话,操作请求

4.    Excutor

1)执行者,执行sql

5.    MapperStatement

1sql语句获取

6.    SqlSource

1sql处理

2)子类

ProviderSqlSource

StaticSqlSource

DynamicSqlSource

RawSqlSource

7.    BoundSql

1)存放sql语句参数等

8.    ParameterHandler

1)参数绑定映射绑定

2)子类:DefaultParameterHandler

9.    ResultSetHandler

1)返回数据数据映射绑定

2)子类:DefaultResultSetHandler


  • SqlSessionFactoryBean

在基础的 MyBatis 用法中,是通过 SqlSessionFactoryBuilder 来创建 SqlSessionFactory 的。

而在 MyBatis-Spring 中,则使用 SqlSessionFactoryBean 来创建。

需要注意的是 SqlSessionFactoryBean 实现了 Spring 的 FactoryBean 接口。

这意味着由 Spring 最终创建的 bean 并不是 SqlSessionFactoryBean 本身,而是工厂类(SqlSessionFactoryBean)的 getObject() 方法的返回结果。

这种情况下,Spring 将会在应用启动时为你创建 SqlSessionFactory,并使用 sqlSessionFactory 这个名字存储起来。



  • 事务管理
在mybatis 和 spring 整合中不是使用的mybatis专用事务,而是默认用的spring 中的 DataSourceTransactionManager 来实现事务管理,代码中无需额外的事务代码



  • SqlSession
在基础的 MyBatis 用法中,是通过 SqlSessionFactory 来创建 SqlSession 的,用它执行映射语句,提交或者回滚,不需要的它的时候,关闭Session即可。
使用 MyBatis-Spring 之后,你不再需要直接使用 SqlSessionFactory 了,因为你的 bean 可以被注入一个线程安全的 SqlSession,它能基于 Spring 的事务配置来自动提交、回滚、关闭 session。
  1. SqlSessionTemplate: 是 MyBatis-Spring 的核心, 实现了SqlSession,是线程安全的,可以被多个DAO或映射器共享使用,它管理Session的生命周期,关闭、提交、回滚等。使用SqlSessionTemplate代替DefaultSqlSession解决同一应用程序中的不同类之间混杂使用可能会引起数据一致性的问题
  2. SqlSessionDaoSupport: SqlSessionDaoSupport 是一个抽象的支持类,用来为你提供 SqlSession。调用 getSqlSession() 方法你会得到一个 SqlSessionTemplate,之后可以用于执行 SQL 方法,在这个类里面,通常更倾向于使用 MapperFactoryBean,因为它不需要额外的代码。但是,如果你需要在 DAO 中做其它非 MyBatis 的工作或需要一个非抽象的实现类,那么这个类就很有用了
@Bean
public SqlSessionFactory sqlSessionFactory() {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
  factoryBean.setDataSource(dataSource());
  return factoryBean.getObject();//这一句
}


  • 注入映射器
  1. 注册映射器:与其在数据访问对象(DAO)中手工编写使用 SqlSessionDaoSupportSqlSessionTemplate 的代码,让 Mybatis-Spring 为你创建一个线程安全的映射器
  2. 发现映射器:注册不需要一个个地注册你的所有映射器。你可以让 MyBatis-Spring 对类路径进行扫描来发现它们。
  • 使用 <mybatis:scan/> 元素
  • 使用 @MapperScan 注解
  • 在经典 Spring XML 配置文件中注册一个 MapperScannerConfigurer



                 

评论
或者使用社交账号快捷登录