Spring-Mybatis SqlSessionFactoryBean 源码解析

理解一个类,首先需要知道类的作用。SqlSessionFactoryBean 类的作用就是通过加载器读取mybatis.xml 和 myabtis-spring.xml生成 SqlSessionFactory。先看一下mybatis配置文件和mybatis-spring整合配置文件。

mybatis 属性配置:

mybatis-spring 整合:

SqlSessionFactoryBean 类继承了 InitializingBean , InitializingBean 的作用是初始化容器后,会执行 afterPropertiesSet() 方法。

从上图中的红框中可以看出,启动时会执行 buildSqlSessionFactory 方法,作用就是创建 SqlSessionFactory。

在介绍 buildSqlSessionFactory  方法之前,需要了解一下 org.apache.ibatis.session.Configuration 类。

Configuration 类的作用是用来存储 mybatis.xml 配置的各种属性,创建 SqlSessionFactory 的过程就是不断的读取配置文件中的属性,然后 set 进入 Configuration 中。


初始化 Configuration 对象之后,需要对传入 SqlSessionFactoryBean 不为空的对象进行赋值。例:

至此。SqlSessionFactoryBean  传入属性赋值已经讲述完成。下面讲述的是对于 mybatis.xml 和 mybatis-spring.xml 中 mapperLocations 的解析。

XMLConfigBuilder:解析mybatis.xml配置文件,使用读取配置文件中各个节点的方式,将属性值set进入Configuration对象。

mybatis.xml解析过程:

从源码可以看出,最开始截取的是根节点 /configuration。然后对根节点中的各个节点进行切割。但是切割的方法都是一样的:root.evalNode()。

切割完成之后,就是将各个元素保存在Configuration中。下面截图是针对于<settings>元素的保存过程


接下来就是最后一步了,对于 mapper.xml 的解析。使用的 XMLMapperBuilder。

相信大家对于 mapper.xml 配置格式已经很清晰,这里就不过多介绍,上源码。

在 configurationElement 是仍然是对于各个节点的拆分,然后针对于各个属性进行一个Configure。

最后将项目中所需要的预加载属性存放到  SqlSource 对象中,进行预加载。

S

由于本文中需要有一些 mybatis 基础。如果发现看起来较吃力,可以先看一下官方的文档,里面有对于各个属性,配置和简单入门使用的讲解。官网地址:http://www.mybatis.org/mybatis-3/zh/index.html

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,868评论 18 139
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,571评论 0 4
  • 格式: int(x,[base])功能: 将一个数字或base类型的字符串转换成整数 函数原型:int(x=0)i...
    随风化作雨阅读 915评论 0 0
  • 2017年12月7号 晴 好几天没写亲子日记了,由于这几天医院刚开业,真的是太忙了,今天是爷爷去接的,回来的挺...
    时康轩妈妈阅读 182评论 0 0
  • 墨 侧脸 瞟我一眼 愣了半秒 转过 头去,莞尔一笑 墨 侧脸 盯我一眼 转过 头去,坏坏一笑 墨 侧脸 瞧我一眼 ...
    冷浪飞歌阅读 286评论 0 0