Spring源码学习(十):Spring与Mybatis整合原理

本文详细探讨了Spring与Mybatis整合的过程,包括SqlSessionFactory和SqlSessionTemplate的加载,以及Mapper的自动绑定。通过分析Spring Boot中Mybatis的自动配置,揭示了SqlSessionFactoryBean的创建和MapperScannerConfigurer如何扫描并注册Mapper。在自动绑定过程中,涉及到Bean的创建、属性设置、异常处理等功能,确保Mybatis能够正常工作。
摘要由CSDN通过智能技术生成

 

目录

1.关键类的加载

1.1 SqlSessionFactory的加载

1.2 SqlSessionTemplate的加载

2. Mapper的自动绑定

2.1 processPropertyPlaceHolders

2.2 Mapper扫描

2.3 Mapper的后处理


学习Mybatis(7):Mybatis运行原理源码分析 其实可以知道Mybatis运行的原理,不难想象Spring整合Mybatis,就是依靠将SqlSessionFactory等组件封装为Bean来实现的。

这里还是根据学习Mybatis(4):结合Spring Boot的例子。

1.关键类的加载

Spring Boot使用Mybatis时,引入的是starter包,同时也会带进来一个autoconfigure依赖。就是该依赖完成的Mybatis自动配置。从spring.factories可以看出,其核心类是MybatisAutoConfiguration,这是一个InitializingBean。不过我们更关注的是两个方法和一个类:

  • sqlSessionFactory(DataSource dataSource)
  • sqlSessionTemplate(SqlSessionFactory sqlSessionFactory)
  • MapperScannerRegistrarNotFoundConfiguration

前两个是方法,被@Bean注解,最后是内部类,会在没有加载MapperFactoryBean、MapperScannerConfigurer时加载,且Import另一个内部类AutoConfiguredMapperScannerRegistrar完成Mapper的扫描。

首先看第一个方法

1.1 SqlSessionFactory的加载

首先会创建一个SqlSessionFactoryBean,这是一个InitializingBean,也是FactoryBean。sqlSessionFactory方法的剩余部分就是将配置文件的配置值赋给SqlSessionFactoryBean,最后调用getObject()方法获得SqlSessionFactory对象。

实际调用了afterPropertiesSet方法,核心逻辑是调用buildSqlSessionFactory(),整个方法大概160行,所以不上源码了。

方法内通过一系列的if块,判断各属性是否为空,不为空则添加到Configuration对象中,最后和独立使用Mybatis时一样,调用sqlSessionFactoryBuilder.build(targetConfiguration)创建一个SqlSessionFactory对象。

这里的各属性其实就是mybatis_config.xml配置文件中的内容,如果是XML形式配置的Spring,也可以在注册SqlSessionFactoryBean时定义,不过在Spring Boot中,都是刚刚从properties或yaml文件中加载的。

在示例中,properties文件里有一条mybatis.mapper-locations配置会在经过解析后赋值给SqlSessionFactoryBean,结合学习Mybatis(7):Mybatis运行原理源码分析,可以看到在XMLMapperBuilder类中,会通过反射将mapper配置文件中namespace属性加载为类,并且通过Configuration#addMapper加载:

    private void bindMapperForNamespace() {
        String namespace = this.builderAssistant.getCurrentNamespace();
        if (namespace 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值