Mybatis源码解析&特性使用

Mybatis与Spring集成过程

2020-07-10  本文已影响0人  spring_coderman

近期准备做一下Mybatis的源码解读,整个系列大概会有6-7篇文章。

先释放一下目录:
1.Mybatis框架组件设计&顶层接口
2.Mybatis框架启动流程分析
3.Mybatis框架源码Configuration分析
4.Mybatis框架一条插入语句的执行流程
5.Mybatis框架从源码角度来讲执行增,删,改的时候如何保证线程安全?
6.Mybatis框架一条查询语句的执行流程
7.Mybatis的日志&异常体系

8.Mybatis与Spring集成过程

9.Mybatis的CRUD代码生成

好吧,说好的6-7篇,一不小心写多了几个,现在继续Mybatis之旅,一般情况下写项目很少单独使用Mybatis框架,基本会基于Spring框架做整合,目前Mybatis+spring作为项目技术组件选型在国内还是很受欢迎的,相关的整合教程也有很多,所以这里不会单独列文章去说这块的内容,笔者曾经在学习的过程中也经常搜这方面的文章,自己搭建demo。因此如果使用框架搭建项目的话一般不会遇到太多问题,这里我们稍微深入探讨一些原理性的东西。
首先clone:https://github.com/mybatis/spring.git,将mybatis整合spring的项目代码down到本地。
整体看整合的内容不是很多,大概分为以下几大块

  1. 接口包扫描 Bean注册
  2. sqlsession Bean注册
  3. 数据源&事务兼容
    下面将分三块内容说明mybatis整合spring的大体方案

1. 接口包扫描 Bean注册

这里的接口包扫描指扫描XXXMapperDAO接口,将创建的代理类注入springbean管理体系,注册扫描的包方式总体有两种。
一种是通过MapperScan注解的方式去标注要扫描的接口包,
另一种是通过xml标签的方式标注要扫描的接口包。
扫描注册bean的类有以下几个:
org.mybatis.spring.annotation.MapperScannerRegistrar
org.mybatis.spring.config.MapperScannerBeanDefinitionParser
org.mybatis.spring.mapper.ClassPathMapperScanner
org.mybatis.spring.mapper.MapperScannerConfigurer

我们跑几个Test Case看一下:
1.org.mybatis.spring.annotation.MapperScanTest#testAnnotationScan


注册入口.png beandefinition定义.png
准备扫描.png
扫描注册BeanDefinition.png

2.sqlsession Bean注册

关于sqlSession Bean注册有如下几个类:
org.mybatis.spring.SqlSessionFactoryBean
org.mybatis.spring.SqlSessionHolder
org.mybatis.spring.SqlSessionTemplate
org.mybatis.spring.SqlSessionUtils

我们重点关注一下这个方法:org.mybatis.spring.SqlSessionFactoryBean#buildSqlSessionFactory
这个方法使用了很多java8的语法特性重新构建了Mybatis 的Configuration对象。
我们使用这个Test Case :org.mybatis.spring.SqlSessionFactoryBeanTest#testDefaults()


configurationinit08.png

3.数据源&事务兼容

spring提供了通用的事务处理服务,因此可以将mybatis的数据源和事务相关的逻辑迁移到spring管理,这里相关的类有:
org.mybatis.spring.transaction.SpringManagedTransaction
org.mybatis.spring.transaction.SpringManagedTransactionFactory
整体就是一个事务工厂,SpringManagedTransactionFactory创建SpringManagedTransaction。
相关的case也比较简单,可以参考org.mybatis.spring.transaction.SpringTransactionManagerTest类。

上一篇下一篇

猜你喜欢

热点阅读