spring源码学习之整合Mybatis原理分析

MyBatis与Spring整合后如何保证SqlSession线程安全

LD is tigger forever,CG are not brothers forever, throw the pot and shine forever.
Modesty is not false, solid is not naive, treacherous but not deceitful, stay with good people, and stay away from poor people.
talk is cheap, show others the code,Keep progress,make a better result.
Survive during the day and develop at night。

目录

概述

<!-- mybatis-spring 整合 -->
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis-spring</artifactId>
  <version>1.2.2</version>
</dependency>

spring启动的时候需要使用一个bean.xml配置文件,

ApplicationContext ctx = new ClassPathXmlApplicationContext(“bean.xml”);

bean.xml文件中就涉及到整合的配置信息,整合使用到以下的配置:

创建MapperScannerConfigurer

这个方法中创建了一个spring-mybatis.jar包中的ClassPathMapperScanner扫描器,这个扫描器继承了spring的ClassPathBeanDefinitionScanner。

ClassPathMapperScanner这个扫描器的主要的作用有以下几个:

第三过滤sbd对象,只接受接口类,从下面的代码中可以看出。

第四完成sbd对象属性的设置,比如设置sqlSessionFactory、BeanClass等,这个sqlSessionFactory是本文接下来要解析的第四完成sbd对象属性的设置,比如设置sqlSessionFactory、BeanClass等,这个sqlSessionFactory是本文接下来要解析的SqlSessionFactoryBea

第五将过滤出来的sbd对象通过这个BeanDefinitionRegistry registry注册器注册到DefaultListableBeanFactory中,这个registry就是方法postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry)中的参数。

mapper接口注册之后,在什么地方实例化和使用呢?后面在分析。

接着看看spring和mybatis整合的另外一个标签。
SqlSessionFactoryBean

这个sqlSessionFactory的实现类中做了什么事情。首先看看这个类的声明:

从配置来看,这个Bean至少提供了两个方法,一个是和dataSource有关,一个和mapperLocations有关,

执行afterPropertiesSet方法

在这个bean被创建的过程中,首先被调用的方法是afterPropertiesSet,这个方法是接口InitializingBean中的方法。
在这个buildSqlSessionFactory()方法中,做了很多事情,但是有些不是必须做的,为了简化分析,我们只关心必须要做的事情。

首先通过一个关键字new创建了对象Configuration,这个对象是mybatis框架的一个核心类,在这里我们不做详细介绍,以后再剖析。接着又创建了new SpringManagedTransactionFactory(),后面介绍这个类的作用,此处略过。接着继续创建new Environment(this.environment, this.transactionFactory, this.dataSource),这个Environment类中持有事物工厂和数据源的引用。接下来就是创建XMLMapperBuilder对象,并且调用了xmlMapperBuilder.parse()方法,这个方法的详细,不在此分析,也不是我们这篇文章要记录的重点,否则会偏离我们的主题,parse()这个方法就是在解析mapperLocation变量所代表的就是mybatis的一个xml配置文件,mapperLocation–>AuthUserMapper.xml,AuthUserMapper.xml的部分代码如下:

xmlMapperBuilder.parse()方法执行完成之后,调用this.sqlSessionFactoryBuilder.build(configuration),这个sqlSessionFactoryBuilder 构造器在哪儿创建的呢?其他它就是SqlSessionFactoryBean的一个私有类变量,初始化SqlSessionFactoryBean的时候,就实例化了这个sqlSessionFactoryBuilder。

程序在调用authUserMapper对象的某个方法的时候,就会调用到MapperProxy对象的invoke()方法,去完成对数据库的操作。

最后附上一张类图,spring和mybatis整合过程中创建的类:

小结:

参考资料和推荐阅读

1.链接: 参考资料.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值