@[toc]

  • 官方学习地址
  • 作用
  • 代码分析
  • buildSqlSessionFactory方法

官方学习地址

官网:http://mybatis.org/spring/zh/factorybean.html

作用

代码分析

类图:

SqlSessionFactoryBean详解_Source


继承的接口:

  • InitializingBean:这个接口的作用是spring初始化的时候会执行实现了InitializingBean接口的afterPropertiesSet方法;具体怎么执行暂时就不说了;
  • ApplicationListener接口作用是在spring容器执行的各个阶段进行监听,SqlSessionFactoryBean实现这个接口是为了容器刷新的时候,更新sqlSessionFactory;可以自己看下onApplicationEvent方法实现;
  • FactoryBean:实现这个接口表示这个类是一个工厂bean,通常是为了给返回的类进行加工处理的,而且获取类返回的是通过getObj返回的;

看这个类就从入口开始看,通过这个方法afterPropertiesSet;

@Override
  public void afterPropertiesSet() throws Exception {
    //dataSource是必须要配置的
    notNull(dataSource, "Property 'dataSource' is required");
    notNull(sqlSessionFactoryBuilder, "Property 'sqlSessionFactoryBuilder' is required");
    state((configuration == null && configLocation == null) || !(configuration != null && configLocation != null),
              "Property 'configuration' and 'configLocation' can not specified with together");

    //主要逻辑都在buildSqlSessionFactory方法,创建sqlSessionFactory,getObject就是返回的sqlSessionFactory 
    this.sqlSessionFactory = buildSqlSessionFactory();
  }

  @Override
  public SqlSessionFactory getObject() throws Exception {
    if (this.sqlSessionFactory == null) {
      afterPropertiesSet();
    }

    return this.sqlSessionFactory;
  }

buildSqlSessionFactory方法

看buildSqlSessionFactory方法,首先要先看Configuration类:

SqlSessionFactoryBean详解_spring_02


大概看一下,发现这个类其实就是我们在mybatis配置文件里面配置的属性,创建SqlSessionFactory实际就是不断给configuration赋值的过程.

SqlSessionFactoryBean详解_spring_03


然后后面一大段都是对configuration进行赋值;

详情可以直接看官网:https://mybatis.org/mybatis-3/zh/configuration.html 我举几个常见的:

SqlSessionFactoryBean详解_Source_04


XMLMapperBuilder的主要解析:

SqlSessionFactoryBean详解_Source_05

最后就是通过sqlSessionFactoryBuilder来创建SqlSessionFactory;