在Mybatis 与 Spring 进行整合的时候,我们会进行sqlSessionFactory 的配置,来创建sqlSessionFactory 对象:如下;

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="configLocation"><value>classpath:mybatis/mybatis-config.xml</value></property>
        <!-- 自动扫描mapper.xml文件 -->
        <property name="mapperLocations" value="classpath:mybatis/mapper/**/*.xml"></property>
     <property name="dataSource" ref="mysqlDs" />
</bean>

 

我们点进去 SqlSessionFactoryBean 内部

类继承关系:果然这三个集成接口全部都是Spring 的扩展接口;
public class SqlSessionFactoryBean implements FactoryBean<SqlSessionFactory>, InitializingBean, ApplicationListener<ApplicationEvent> 
根据XML的配置,我们可以看到(知识点:对于定义的 Resource属性,Spring 会自动将我们XML 配置的资源文件转换为Resource 对象,就可以对文件进行操作了,很方便 )
  private Resource configLocation;
 private Resource[] mapperLocations;
  private DataSource dataSource;

因为 SqlSessionFactoryBean 实现了 InitializingBean的接口,我们先看 afterPropertiesSet() 方法:

 public void afterPropertiesSet() throws Exception {
    notNull(dataSource, "Property 'dataSource' is required");
    notNull(sqlSessionFactoryBuilder, "Property 'sqlSessionFactoryBuilder' is required");
  //初始化sqlSessionFactory
    this.sqlSessionFactory = buildSqlSessionFactory();
  }

可以看到 buildSqlSessionFactory() 方法进行了sqlSessionFactory 的初始化操作;

buildSqlSessionFactory()内容比较多,从全局出发大致就是这四件事情:

1. 在整个sqlSessionFactory 维护着一个Configuration 的配置信息,这个配置信息包括了数据库的配置,以及我们定义mybatis-config.xml   我们自定义的mapper.xml 解析后的配置信息,几乎是所有的mapper配置信息都可以在这个类中找到,是mybatis 开发中重要组件,没有此类,几乎所有的方法不能运行;

2.
xmlConfigBuilder.parse(); 解析 mybatis-config.xml ,把一些我们在 mybatis-config.xml 定义的一些配置 plugins, typeAliases,mappers等很多配置的信息,存放到 Configuration 组件中;
3. xmlMapperBuilder.parse(); 这个是用来解析我们的自定义的mapper.xml 的方法,作用也一样,就是将配置sql ,namespace ,方法加载到 Configuration 组件中,会将sql片段进行保存(XML 解析的方式主要就是jaxp 的dom 解析以及xpath 解析);

4. return this.sqlSessionFactoryBuilder.build(configuration); 创建 sqlSessionFactory 对象,-> 返回

  return new DefaultSqlSessionFactory(config); 默认的 DefaultSqlSessionFactory

可以看到很多的操作都是在维护 Configuration的配置信息;可想而知,很重要;

 

posted on 2018-12-01 22:43  iscys  阅读(211)  评论(0编辑  收藏  举报