Class HierarchicalSqlSessionFactoryBean

  • All Implemented Interfaces:
    EventListener, org.springframework.beans.factory.FactoryBean<org.apache.ibatis.session.SqlSessionFactory>, org.springframework.beans.factory.InitializingBean, org.springframework.context.ApplicationListener<org.springframework.context.ApplicationEvent>

    public class HierarchicalSqlSessionFactoryBean
    extends org.mybatis.spring.SqlSessionFactoryBean
    Extends the MyBatis-Spring support by allowing a choice of ResourceLoader. The ResourceLoader will be used to load the SqlMapConfig file and use a HierarchicalXMLConfigBuilder to read the individual MyBatis (3.x) resources.

    Pending a better way to extend/override, much of the implementation is a direct copy of the MyBatis-Spring SqlSessionFactoryBean; some of the protected methods do not have access to the object's state and can therefore not be overridden successfully.

    This is equivalent to HierarchicalSqlMapClientFactoryBean which extended iBatis (2.x). See also: IBATIS-589 and:

    Since:
    4.0
    Author:
    Derek Hulley, janv
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void afterPropertiesSet()  
      protected org.apache.ibatis.session.SqlSessionFactory buildSqlSessionFactory()
      Build a SqlSessionFactory instance.
      org.apache.ibatis.mapping.DatabaseIdProvider getDatabaseIdProvider()
      Sets the DatabaseIdProvider.
      org.apache.ibatis.session.SqlSessionFactory getObject()
      Class<? extends org.apache.ibatis.session.SqlSessionFactory> getObjectType()
      boolean isSingleton()
      void onApplicationEvent​(org.springframework.context.ApplicationEvent event)
      void setConfigLocation​(org.springframework.core.io.Resource configLocation)
      Set the location of the MyBatis SqlSessionFactory config file.
      void setConfigurationProperties​(Properties sqlSessionFactoryProperties)
      Set optional properties to be passed into the SqlSession configuration, as alternative to a &lt;properties&gt; tag in the configuration xml file.
      void setDatabaseIdProvider​(org.apache.ibatis.mapping.DatabaseIdProvider databaseIdProvider)
      Gets the DatabaseIdProvider
      void setDataSource​(DataSource dataSource)
      Set the JDBC DataSource that this instance should manage transactions for.
      void setEnvironment​(String environment)
      NOTE: This class overrides any Environment you have set in the MyBatis config file.
      void setFailFast​(boolean failFast)
      If true, a final check is done on Configuration to assure that all mapped statements are fully loaded and there is no one still pending to resolve includes.
      void setMapperLocations​(org.springframework.core.io.Resource[] mapperLocations)
      Set locations of MyBatis mapper files that are going to be merged into the SqlSessionFactory configuration at runtime.
      void setObjectFactory​(org.apache.ibatis.reflection.factory.ObjectFactory objectFactory)
      Sets the ObjectFactory.
      void setObjectWrapperFactory​(org.apache.ibatis.reflection.wrapper.ObjectWrapperFactory objectWrapperFactory)
      Sets the ObjectWrapperFactory.
      void setPlugins​(org.apache.ibatis.plugin.Interceptor[] plugins)
      Mybatis plugin list.
      void setResourceLoader​(HierarchicalResourceLoader resourceLoader)
      Set the resource loader to use.
      void setSqlSessionFactoryBuilder​(org.apache.ibatis.session.SqlSessionFactoryBuilder sqlSessionFactoryBuilder)
      Sets the SqlSessionFactoryBuilder to use when creating the SqlSessionFactory.
      void setTransactionFactory​(org.apache.ibatis.transaction.TransactionFactory transactionFactory)
      Set the MyBatis TransactionFactory to use.
      void setTypeAliases​(Class<?>[] typeAliases)
      List of type aliases to register.
      void setTypeAliasesPackage​(String typeAliasesPackage)
      Packages to search for type aliases.
      void setTypeAliasesSuperType​(Class<?> typeAliasesSuperType)
      Super class which domain objects have to extend to have a type alias created.
      void setTypeHandlers​(org.apache.ibatis.type.TypeHandler<?>[] typeHandlers)
      Set type handlers.
      void setTypeHandlersPackage​(String typeHandlersPackage)
      Packages to search for type handlers.
      • Methods inherited from class org.mybatis.spring.SqlSessionFactoryBean

        getVfs, setVfs
    • Constructor Detail

      • HierarchicalSqlSessionFactoryBean

        public HierarchicalSqlSessionFactoryBean()
        Default constructor
    • Method Detail

      • setResourceLoader

        public void setResourceLoader​(HierarchicalResourceLoader resourceLoader)
        Set the resource loader to use. To use the #resource.dialect# placeholder, use the HierarchicalResourceLoader.
        Parameters:
        resourceLoader - the resource loader to use
      • setObjectFactory

        public void setObjectFactory​(org.apache.ibatis.reflection.factory.ObjectFactory objectFactory)
        Sets the ObjectFactory.
        Overrides:
        setObjectFactory in class org.mybatis.spring.SqlSessionFactoryBean
        Parameters:
        objectFactory - ObjectFactory
        Since:
        1.1.2
      • setObjectWrapperFactory

        public void setObjectWrapperFactory​(org.apache.ibatis.reflection.wrapper.ObjectWrapperFactory objectWrapperFactory)
        Sets the ObjectWrapperFactory.
        Overrides:
        setObjectWrapperFactory in class org.mybatis.spring.SqlSessionFactoryBean
        Parameters:
        objectWrapperFactory - ObjectWrapperFactory
        Since:
        1.1.2
      • getDatabaseIdProvider

        public org.apache.ibatis.mapping.DatabaseIdProvider getDatabaseIdProvider()
        Sets the DatabaseIdProvider.
        Overrides:
        getDatabaseIdProvider in class org.mybatis.spring.SqlSessionFactoryBean
        Returns:
        DatabaseIdProvider
        Since:
        1.1.0
      • setDatabaseIdProvider

        public void setDatabaseIdProvider​(org.apache.ibatis.mapping.DatabaseIdProvider databaseIdProvider)
        Gets the DatabaseIdProvider
        Overrides:
        setDatabaseIdProvider in class org.mybatis.spring.SqlSessionFactoryBean
        Parameters:
        databaseIdProvider - DatabaseIdProvider
        Since:
        1.1.0
      • setPlugins

        public void setPlugins​(org.apache.ibatis.plugin.Interceptor[] plugins)
        Mybatis plugin list.
        Overrides:
        setPlugins in class org.mybatis.spring.SqlSessionFactoryBean
        Parameters:
        plugins - list of plugins
        Since:
        1.0.1
      • setTypeAliasesPackage

        public void setTypeAliasesPackage​(String typeAliasesPackage)
        Packages to search for type aliases.
        Overrides:
        setTypeAliasesPackage in class org.mybatis.spring.SqlSessionFactoryBean
        Parameters:
        typeAliasesPackage - package to scan for domain objects
        Since:
        1.0.1
      • setTypeAliasesSuperType

        public void setTypeAliasesSuperType​(Class<?> typeAliasesSuperType)
        Super class which domain objects have to extend to have a type alias created. No effect if there is no package to scan configured.
        Overrides:
        setTypeAliasesSuperType in class org.mybatis.spring.SqlSessionFactoryBean
        Parameters:
        typeAliasesSuperType - super class for domain objects
        Since:
        1.1.2
      • setTypeHandlersPackage

        public void setTypeHandlersPackage​(String typeHandlersPackage)
        Packages to search for type handlers.
        Overrides:
        setTypeHandlersPackage in class org.mybatis.spring.SqlSessionFactoryBean
        Parameters:
        typeHandlersPackage - package to scan for type handlers
        Since:
        1.0.1
      • setTypeHandlers

        public void setTypeHandlers​(org.apache.ibatis.type.TypeHandler<?>[] typeHandlers)
        Set type handlers. They must be annotated with MappedTypes and optionally with MappedJdbcTypes
        Overrides:
        setTypeHandlers in class org.mybatis.spring.SqlSessionFactoryBean
        Parameters:
        typeHandlers - Type handler list
        Since:
        1.0.1
      • setTypeAliases

        public void setTypeAliases​(Class<?>[] typeAliases)
        List of type aliases to register. They can be annotated with Alias
        Overrides:
        setTypeAliases in class org.mybatis.spring.SqlSessionFactoryBean
        Parameters:
        typeAliases - Type aliases list
        Since:
        1.0.1
      • setFailFast

        public void setFailFast​(boolean failFast)
        If true, a final check is done on Configuration to assure that all mapped statements are fully loaded and there is no one still pending to resolve includes. Defaults to false.
        Overrides:
        setFailFast in class org.mybatis.spring.SqlSessionFactoryBean
        Parameters:
        failFast - enable failFast
        Since:
        1.0.1
      • setConfigLocation

        public void setConfigLocation​(org.springframework.core.io.Resource configLocation)
        Set the location of the MyBatis SqlSessionFactory config file. A typical value is "WEB-INF/mybatis-configuration.xml".
        Overrides:
        setConfigLocation in class org.mybatis.spring.SqlSessionFactoryBean
      • setMapperLocations

        public void setMapperLocations​(org.springframework.core.io.Resource[] mapperLocations)
        Set locations of MyBatis mapper files that are going to be merged into the SqlSessionFactory configuration at runtime. This is an alternative to specifying "<sqlmapper>" entries in an MyBatis config file. This property being based on Spring's resource abstraction also allows for specifying resource patterns here: e.g. "classpath*:sqlmap/*-mapper.xml".
        Overrides:
        setMapperLocations in class org.mybatis.spring.SqlSessionFactoryBean
      • setConfigurationProperties

        public void setConfigurationProperties​(Properties sqlSessionFactoryProperties)
        Set optional properties to be passed into the SqlSession configuration, as alternative to a &lt;properties&gt; tag in the configuration xml file. This will be used to resolve placeholders in the config file.
        Overrides:
        setConfigurationProperties in class org.mybatis.spring.SqlSessionFactoryBean
      • setDataSource

        public void setDataSource​(DataSource dataSource)
        Set the JDBC DataSource that this instance should manage transactions for. The DataSource should match the one used by the SqlSessionFactory: for example, you could specify the same JNDI DataSource for both. A transactional JDBC Connection for this DataSource will be provided to application code accessing this DataSource directly via DataSourceUtils or DataSourceTransactionManager. The DataSource specified here should be the target DataSource to manage transactions for, not a TransactionAwareDataSourceProxy. Only data access code may work with TransactionAwareDataSourceProxy, while the transaction manager needs to work on the underlying target DataSource. If there's nevertheless a TransactionAwareDataSourceProxy passed in, it will be unwrapped to extract its target DataSource.
        Overrides:
        setDataSource in class org.mybatis.spring.SqlSessionFactoryBean
      • setSqlSessionFactoryBuilder

        public void setSqlSessionFactoryBuilder​(org.apache.ibatis.session.SqlSessionFactoryBuilder sqlSessionFactoryBuilder)
        Sets the SqlSessionFactoryBuilder to use when creating the SqlSessionFactory. This is mainly meant for testing so that mock SqlSessionFactory classes can be injected. By default, SqlSessionFactoryBuilder creates DefaultSqlSessionFactory instances.
        Overrides:
        setSqlSessionFactoryBuilder in class org.mybatis.spring.SqlSessionFactoryBean
      • setTransactionFactory

        public void setTransactionFactory​(org.apache.ibatis.transaction.TransactionFactory transactionFactory)
        Set the MyBatis TransactionFactory to use. Default is SpringManagedTransactionFactory The default SpringManagedTransactionFactory should be appropriate for all cases: be it Spring transaction management, EJB CMT or plain JTA. If there is no active transaction, SqlSession operations will execute SQL statements non-transactionally. It is strongly recommended to use the default TransactionFactory. If not used, any attempt at getting an SqlSession through Spring's MyBatis framework will throw an exception if a transaction is active.
        Overrides:
        setTransactionFactory in class org.mybatis.spring.SqlSessionFactoryBean
        Parameters:
        transactionFactory - the MyBatis TransactionFactory
        See Also:
        SpringManagedTransactionFactory
      • setEnvironment

        public void setEnvironment​(String environment)
        NOTE: This class overrides any Environment you have set in the MyBatis config file. This is used only as a placeholder name. The default value is SqlSessionFactoryBean.class.getSimpleName().
        Overrides:
        setEnvironment in class org.mybatis.spring.SqlSessionFactoryBean
        Parameters:
        environment - the environment name
      • afterPropertiesSet

        public void afterPropertiesSet()
                                throws Exception
        Specified by:
        afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean
        Overrides:
        afterPropertiesSet in class org.mybatis.spring.SqlSessionFactoryBean
        Throws:
        Exception
      • buildSqlSessionFactory

        protected org.apache.ibatis.session.SqlSessionFactory buildSqlSessionFactory()
                                                                              throws IOException
        Build a SqlSessionFactory instance.

        The default implementation uses the standard MyBatis XMLConfigBuilder API to build a SqlSessionFactory instance based on an Reader.

        Overrides:
        buildSqlSessionFactory in class org.mybatis.spring.SqlSessionFactoryBean
        Returns:
        SqlSessionFactory
        Throws:
        IOException - if loading the config file failed
      • getObject

        public org.apache.ibatis.session.SqlSessionFactory getObject()
                                                              throws Exception
        Specified by:
        getObject in interface org.springframework.beans.factory.FactoryBean<org.apache.ibatis.session.SqlSessionFactory>
        Overrides:
        getObject in class org.mybatis.spring.SqlSessionFactoryBean
        Throws:
        Exception
      • getObjectType

        public Class<? extends org.apache.ibatis.session.SqlSessionFactory> getObjectType()
        Specified by:
        getObjectType in interface org.springframework.beans.factory.FactoryBean<org.apache.ibatis.session.SqlSessionFactory>
        Overrides:
        getObjectType in class org.mybatis.spring.SqlSessionFactoryBean
      • isSingleton

        public boolean isSingleton()
        Specified by:
        isSingleton in interface org.springframework.beans.factory.FactoryBean<org.apache.ibatis.session.SqlSessionFactory>
        Overrides:
        isSingleton in class org.mybatis.spring.SqlSessionFactoryBean
      • onApplicationEvent

        public void onApplicationEvent​(org.springframework.context.ApplicationEvent event)
        Specified by:
        onApplicationEvent in interface org.springframework.context.ApplicationListener<org.springframework.context.ApplicationEvent>
        Overrides:
        onApplicationEvent in class org.mybatis.spring.SqlSessionFactoryBean