`

mybatis与spring整合之SqlSessionFactoryBean

阅读更多
//初始化SqlSessionFactoryBean
//SqlSessionFactoryBean实现了InitializingBean来进行初始化
public void afterPropertiesSet() throws Exception {
    notNull(dataSource, "Property 'dataSource' is required");
    notNull(sqlSessionFactoryBuilder, "Property 'sqlSessionFactoryBuilder' is required");

    this.sqlSessionFactory = buildSqlSessionFactory();
  }

//这个方法主要就是解析mapper的xml和mybaits的配置xml存入Configuration中
protected SqlSessionFactory buildSqlSessionFactory() throws IOException {

    Configuration configuration;

    XMLConfigBuilder xmlConfigBuilder = null;
    //解析mybaits的配置文件mybatis-config.xml
    if (this.configLocation != null) {
      xmlConfigBuilder = new XMLConfigBuilder(this.configLocation.getInputStream(), null, this.configurationProperties);
      configuration = xmlConfigBuilder.getConfiguration();
    } else {
      if (logger.isDebugEnabled()) {
        logger.debug("Property 'configLocation' not specified, using default MyBatis Configuration");
      }
      configuration = new Configuration();
      configuration.setVariables(this.configurationProperties);
    }

    if (this.objectFactory != null) {
      configuration.setObjectFactory(this.objectFactory);
    }

    if (this.objectWrapperFactory != null) {
      configuration.setObjectWrapperFactory(this.objectWrapperFactory);
    }

    if (hasLength(this.typeAliasesPackage)) {
      String[] typeAliasPackageArray = tokenizeToStringArray(this.typeAliasesPackage,
          ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS);
      for (String packageToScan : typeAliasPackageArray) {
        configuration.getTypeAliasRegistry().registerAliases(packageToScan,
                typeAliasesSuperType == null ? Object.class : typeAliasesSuperType);
        if (logger.isDebugEnabled()) {
          logger.debug("Scanned package: '" + packageToScan + "' for aliases");
        }
      }
    }

    if (!isEmpty(this.typeAliases)) {
      for (Class<?> typeAlias : this.typeAliases) {
        configuration.getTypeAliasRegistry().registerAlias(typeAlias);
        if (logger.isDebugEnabled()) {
          logger.debug("Registered type alias: '" + typeAlias + "'");
        }
      }
    }

    if (!isEmpty(this.plugins)) {
      for (Interceptor plugin : this.plugins) {
        configuration.addInterceptor(plugin);
        if (logger.isDebugEnabled()) {
          logger.debug("Registered plugin: '" + plugin + "'");
        }
      }
    }

    if (hasLength(this.typeHandlersPackage)) {
      String[] typeHandlersPackageArray = tokenizeToStringArray(this.typeHandlersPackage,
          ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS);
      for (String packageToScan : typeHandlersPackageArray) {
        configuration.getTypeHandlerRegistry().register(packageToScan);
        if (logger.isDebugEnabled()) {
          logger.debug("Scanned package: '" + packageToScan + "' for type handlers");
        }
      }
    }

    if (!isEmpty(this.typeHandlers)) {
      for (TypeHandler<?> typeHandler : this.typeHandlers) {
        configuration.getTypeHandlerRegistry().register(typeHandler);
        if (logger.isDebugEnabled()) {
          logger.debug("Registered type handler: '" + typeHandler + "'");
        }
      }
    }
    
    if (xmlConfigBuilder != null) {
      try {
        xmlConfigBuilder.parse();

        if (logger.isDebugEnabled()) {
          logger.debug("Parsed configuration file: '" + this.configLocation + "'");
        }
      } catch (Exception ex) {
        throw new NestedIOException("Failed to parse config resource: " + this.configLocation, ex);
      } finally {
        ErrorContext.instance().reset();
      }
    }

    if (this.transactionFactory == null) {
      this.transactionFactory = new SpringManagedTransactionFactory();
    }

    Environment environment = new Environment(this.environment, this.transactionFactory, this.dataSource);
    configuration.setEnvironment(environment);

    if (this.databaseIdProvider != null) {
      try {
        configuration.setDatabaseId(this.databaseIdProvider.getDatabaseId(this.dataSource));
      } catch (SQLException e) {
        throw new NestedIOException("Failed getting a databaseId", e);
      }
    }
     
    //解析mapper
    if (!isEmpty(this.mapperLocations)) {
      for (Resource mapperLocation : this.mapperLocations) {
        if (mapperLocation == null) {
          continue;
        }

        try {
          XMLMapperBuilder xmlMapperBuilder = new XMLMapperBuilder(mapperLocation.getInputStream(),
              configuration, mapperLocation.toString(), configuration.getSqlFragments());
          xmlMapperBuilder.parse();
        } catch (Exception e) {
          throw new NestedIOException("Failed to parse mapping resource: '" + mapperLocation + "'", e);
        } finally {
          ErrorContext.instance().reset();
        }

        if (logger.isDebugEnabled()) {
          logger.debug("Parsed mapper file: '" + mapperLocation + "'");
        }
      }
    } else {
      if (logger.isDebugEnabled()) {
        logger.debug("Property 'mapperLocations' was not specified or no matching resources found");
      }
    }

    return this.sqlSessionFactoryBuilder.build(configuration);
  }


public SqlSessionFactory build(Configuration config) {
    //SqlSessionFactory的默认实现是DefaultSqlSessionFactory
    return new DefaultSqlSessionFactory(config);
  }


/**该类的主要作用是解析xml文件,创建SqlSessionFactory*/

分享到:
评论

相关推荐

    mybatis与spring整合全部jar包(包括springmvc

    在标题提到的“mybatis与spring整合全部jar包(包括springmvc)”中,我们关注的重点是这两个框架的集成以及可能包含的Spring MVC部分,这通常涉及到以下几个关键知识点: 1. **MyBatis**:MyBatis是一个优秀的持久层...

    mybatis与spring整合全部jar包

    在"mybatis与spring整合全部jar包"中,包含了一系列用于整合这两个框架所需的库文件。这些jar包主要分为以下几个部分: 1. **MyBatis核心库**:包括mybatis.jar,它包含了MyBatis的核心功能,如SQL映射文件解析、...

    MyBatis与Spring整合jar包(1).rar

    MyBatis与Spring整合是Java开发中常见的技术组合,它们的整合可以让我们在使用Spring管理事务和依赖注入的同时,利用MyBatis强大的SQL映射功能。这个名为"MyBatis与Spring整合jar包(1).rar"的压缩包,很可能是包含了...

    mybatis和spring整合jar包

    标题中的"mybatis和spring整合jar包"表明我们要讨论的是如何将两个流行的Java框架——MyBatis和Spring——集成在一起,以便在同一个项目中利用它们各自的优势。MyBatis是一个轻量级的持久层框架,它允许开发者用SQL...

    mybatis-spring整合项目

    《mybatis-spring整合项目》是GitHub上官方提供的一个示例,它展示了如何将MyBatis和Spring框架完美地结合起来,实现数据访问层的高效管理。这个项目为开发者提供了一个清晰的模板,帮助他们理解并掌握这两个强大...

    mybatis-spring整合jar包

    总的来说,MyBatis-Spring整合简化了在Spring应用中使用MyBatis的过程,提高了开发效率,并且提供了良好的事务管理和依赖注入功能。通过正确配置和使用,可以构建出稳定、高效的Java Web应用程序。

    MyBatis_Spring整合jar包(全部jar包)

    MyBatis_Spring整合是Java开发中常见的数据访问层解决方案,它将MyBatis的灵活映射机制与Spring的依赖注入和事务管理相结合,提供了一种高效、便捷的数据操作方式。这个压缩包包含了进行MyBatis与Spring整合所需的...

    Mybatis与Spring整合创建Web项目

    以下是对"Mybatis与Spring整合创建Web项目"这一主题的详细说明: 一、Mybatis简介 Mybatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Mybatis避免了几乎所有的JDBC代码和手动设置参数以及...

    MyBatis-Spring整合示例

    《MyBatis-Spring整合详解》 在Java开发中,MyBatis和Spring是两个非常重要的框架,它们各自在持久层和应用层有着广泛的应用。MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,而Spring...

    Mybatis与Spring整合所需完整jar包(包含连接池的jar包)

    在本资源中,我们收集了整合MyBatis与Spring所需的全部jar包,同时也包含了连接池的jar包,以优化数据库性能。 首先,MyBatis框架的核心jar包包括MyBatis的核心库mybatis-x.x.x.jar,它包含了MyBatis的SQL映射、...

    mybatis与spring整合jar包

    本篇将详细阐述MyBatis与Spring整合的关键知识点,以及如何使用`mybatis-spring-1.2.2`整合包。 一、MyBatis简介 MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的...

    mybatis与spring整合全部jar包.rar

    标题 "mybatis与spring整合全部jar包.rar" 描述的内容涉及到的是将MyBatis与Spring进行集成时所需的一系列依赖库。MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,而Spring是一个全面的...

    MyBatis整合Spring中间件jar包 mybatis-spring-1.3.0.jar

    MyBatis-Spring是MyBatis与Spring框架的整合组件,其主要目的是简化在Spring应用中集成MyBatis的过程,使两者能够无缝协作。mybatis-spring-1.3.0.jar是这个中间件的特定版本,包含了实现这种集成所需的所有类和资源...

    mybatis与spring整合中文版

    在"MyBatis 与 Spring 整合中文版"的文档中,主要涵盖了以下几个核心知识点: 1. **整合背景**:在Java Web开发中,MyBatis与Spring的结合可以避免直接操作JDBC,提高代码的可读性和可维护性。Spring通过管理...

    Mybatis与Spring整合全部jar包

    将Mybatis与Spring整合,可以充分利用两者的优点,实现更高效、更模块化的开发。 整合Mybatis和Spring,首先需要理解它们的核心概念。Mybatis中的核心组件是SqlSessionFactory和SqlSession,它们分别负责创建...

    mybatis-spring整合包.zip

    MyBatis-Spring整合后,主要实现以下功能: 1. **SqlSessionFactoryBean**:MyBatis-Spring提供了一个SqlSessionFactoryBean,它继承自Spring的AbstractSqlSessionFactoryBean,用于创建SqlSessionFactory。开发者...

    mybatis-spring最新整合包

    在IT行业中,MyBatis-Spring是一个非常重要的整合框架,它将流行的ORM框架MyBatis与Spring框架无缝集成,使得开发者能够更方便地在Spring应用中使用MyBatis。本资源提供的是MyBatis-Spring的最新整合包,版本为1.2.3...

    mybatis与spring整合全部jar包(包括springmvc).zip

    这个名为“mybatis与spring整合全部jar包(包括springmvc).zip”的压缩包提供了进行整合所需的全部依赖库,使得开发者可以快速搭建一个功能完备的开发环境。下面将详细阐述MyBatis、Spring以及Spring MVC这三个关键...

    Mybatis与Spring整合

    Mybatis与Spring的整合是为了在Java开发中同时利用这两个优秀的框架,提高开发效率和代码的可维护性。Mybatis是一个轻量级的持久层框架,它简化了SQL映射和对象关系映射的过程,而Spring则是一个全面的企业级应用...

    mybatis和spring整合jar

    这个`mybatis-spring-1.2.0-SNAPSHOT-bundle`文件就是这种整合的核心组件,包含了使MyBatis与Spring协同工作的所有必要类和配置。 1. **MyBatis-Spring的核心功能:** - **SqlSessionFactoryBean**:这是一个...

Global site tag (gtag.js) - Google Analytics