zoukankan      html  css  js  c++  java
  • Mybatis SqlsessionFactory

    在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的配置信息;可想而知,很重要;

  • 相关阅读:
    女程序员这么少是因为怕秃头?如果你这样想,那就错了...
    使用简单的c#示例的坚实的架构原则
    第1部分设计模式FAQ(培训)
    为什么微软部分类和Java不?
    现实世界四部分类和部分方法的使用
    回到基础:n层ASP的异常管理设计指南。网络应用
    学习c#(第9天):理解c#中的事件(一种见解)
    EventBroker:同步和异步通知组件,松散耦合的事件处理
    潜水在OOP(第一天):多态和继承(早期绑定/编译时多态)
    学习c#(第8天):c#中的索引器(一种实用方法)
  • 原文地址:https://www.cnblogs.com/iscys/p/10051513.html
Copyright © 2011-2022 走看看