Class HierarchicalSqlSessionFactoryBean

java.lang.Object
org.mybatis.spring.SqlSessionFactoryBean
org.alfresco.ibatis.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.event.ContextRefreshedEvent>

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: <a href=http://code.google.com/p/mybatis/issues/detail?id=21

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

    Fields inherited from interface org.springframework.beans.factory.FactoryBean

    OBJECT_TYPE_ATTRIBUTE
  • Constructor Summary

    Constructors
    Constructor
    Description
    Default constructor
  • Method Summary

    Modifier and Type
    Method
    Description
    void
     
    protected org.apache.ibatis.session.SqlSessionFactory
    Build a SqlSessionFactory instance.
    org.apache.ibatis.mapping.DatabaseIdProvider
    Sets the DatabaseIdProvider.
     
    org.apache.ibatis.session.SqlSessionFactory
    Class<? extends org.apache.ibatis.session.SqlSessionFactory>
    boolean
    void
    onApplicationEvent(org.springframework.context.event.ContextRefreshedEvent 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
    Set the JDBC DataSource that this instance should manage transactions for.
    void
     
    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
    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

    addMapperLocations, addPlugins, addScriptingLanguageDrivers, addTypeAliases, addTypeHandlers, getCache, getVfs, setCache, setConfiguration, setDefaultEnumTypeHandler, setDefaultScriptingLanguageDriver, setScriptingLanguageDrivers, setVfs

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface org.springframework.context.ApplicationListener

    supportsAsyncExecution
  • Constructor Details

    • HierarchicalSqlSessionFactoryBean

      public HierarchicalSqlSessionFactoryBean()
      Default constructor
  • Method Details

    • getDbMetricsReporter

      public DBMetricsReporter getDbMetricsReporter()
    • setDbMetricsReporter

      public void setDbMetricsReporter(DBMetricsReporter dbMetricsReporter)
    • setResourceLoader

      public void setResourceLoader(HierarchicalResourceLoader resourceLoader)
      Set the resource loader to use. To use the #resource.dialect&#35 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.event.ContextRefreshedEvent event)
      Specified by:
      onApplicationEvent in interface org.springframework.context.ApplicationListener<org.springframework.context.event.ContextRefreshedEvent>
      Overrides:
      onApplicationEvent in class org.mybatis.spring.SqlSessionFactoryBean