Package org.mybatis.spring
Class SqlSessionFactoryBean
- java.lang.Object
-
- org.mybatis.spring.SqlSessionFactoryBean
-
- All Implemented Interfaces:
java.util.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 SqlSessionFactoryBean extends java.lang.Object implements org.springframework.beans.factory.FactoryBean<org.apache.ibatis.session.SqlSessionFactory>, org.springframework.beans.factory.InitializingBean, org.springframework.context.ApplicationListener<org.springframework.context.ApplicationEvent>
FactoryBean
that creates a MyBatisSqlSessionFactory
. This is the usual way to set up a shared MyBatisSqlSessionFactory
in a Spring application context; the SqlSessionFactory can then be passed to MyBatis-based DAOs via dependency injection. EitherDataSourceTransactionManager
orJtaTransactionManager
can be used for transaction demarcation in combination with aSqlSessionFactory
. JTA should be used for transactions which span multiple databases or when container managed transactions (CMT) are being used.- Author:
- Putthiphong Boonphong, Hunter Presnall, Eduardo Macarron, EddĂș MelĂ©ndez, Kazuki Shimizu
- See Also:
setConfigLocation(org.springframework.core.io.Resource)
,setDataSource(javax.sql.DataSource)
-
-
Constructor Summary
Constructors Constructor Description SqlSessionFactoryBean()
-
Method Summary
Modifier and Type Method Description void
afterPropertiesSet()
protected org.apache.ibatis.session.SqlSessionFactory
buildSqlSessionFactory()
Build aSqlSessionFactory
instance.org.apache.ibatis.cache.Cache
getCache()
Gets the Cache.org.apache.ibatis.mapping.DatabaseIdProvider
getDatabaseIdProvider()
Gets the DatabaseIdProviderorg.apache.ibatis.session.SqlSessionFactory
getObject()
java.lang.Class<? extends org.apache.ibatis.session.SqlSessionFactory>
getObjectType()
java.lang.Class<? extends org.apache.ibatis.io.VFS>
getVfs()
Gets the VFS.boolean
isSingleton()
void
onApplicationEvent(org.springframework.context.ApplicationEvent event)
void
setCache(org.apache.ibatis.cache.Cache cache)
Sets the Cache.void
setConfigLocation(org.springframework.core.io.Resource configLocation)
Set the location of the MyBatisSqlSessionFactory
config file.void
setConfiguration(org.apache.ibatis.session.Configuration configuration)
Set a customized MyBatis configuration.void
setConfigurationProperties(java.util.Properties sqlSessionFactoryProperties)
Set optional properties to be passed into the SqlSession configuration, as alternative to a<properties>
tag in the configuration xml file.void
setDatabaseIdProvider(org.apache.ibatis.mapping.DatabaseIdProvider databaseIdProvider)
Sets the DatabaseIdProvider.void
setDataSource(javax.sql.DataSource dataSource)
Set the JDBCDataSource
that this instance should manage transactions for.void
setDefaultScriptingLanguageDriver(java.lang.Class<? extends org.apache.ibatis.scripting.LanguageDriver> defaultScriptingLanguageDriver)
Set a default scripting language driver class.void
setEnvironment(java.lang.String environment)
NOTE: This class overrides anyEnvironment
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 theSqlSessionFactory
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
setScriptingLanguageDrivers(org.apache.ibatis.scripting.LanguageDriver... scriptingLanguageDrivers)
Set scripting language drivers.void
setSqlSessionFactoryBuilder(org.apache.ibatis.session.SqlSessionFactoryBuilder sqlSessionFactoryBuilder)
Sets theSqlSessionFactoryBuilder
to use when creating theSqlSessionFactory
.void
setTransactionFactory(org.apache.ibatis.transaction.TransactionFactory transactionFactory)
Set the MyBatis TransactionFactory to use.void
setTypeAliases(java.lang.Class<?>... typeAliases)
List of type aliases to register.void
setTypeAliasesPackage(java.lang.String typeAliasesPackage)
Packages to search for type aliases.void
setTypeAliasesSuperType(java.lang.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(java.lang.String typeHandlersPackage)
Packages to search for type handlers.void
setVfs(java.lang.Class<? extends org.apache.ibatis.io.VFS> vfs)
Sets the VFS.
-
-
-
Method Detail
-
setObjectFactory
public void setObjectFactory(org.apache.ibatis.reflection.factory.ObjectFactory objectFactory)
Sets the ObjectFactory.- Parameters:
objectFactory
- a custom ObjectFactory- Since:
- 1.1.2
-
setObjectWrapperFactory
public void setObjectWrapperFactory(org.apache.ibatis.reflection.wrapper.ObjectWrapperFactory objectWrapperFactory)
Sets the ObjectWrapperFactory.- Parameters:
objectWrapperFactory
- a specified ObjectWrapperFactory- Since:
- 1.1.2
-
getDatabaseIdProvider
public org.apache.ibatis.mapping.DatabaseIdProvider getDatabaseIdProvider()
Gets the DatabaseIdProvider- Returns:
- a specified DatabaseIdProvider
- Since:
- 1.1.0
-
setDatabaseIdProvider
public void setDatabaseIdProvider(org.apache.ibatis.mapping.DatabaseIdProvider databaseIdProvider)
Sets the DatabaseIdProvider. As of version 1.2.2 this variable is not initialized by default.- Parameters:
databaseIdProvider
- a DatabaseIdProvider- Since:
- 1.1.0
-
getVfs
public java.lang.Class<? extends org.apache.ibatis.io.VFS> getVfs()
Gets the VFS.- Returns:
- a specified VFS
-
setVfs
public void setVfs(java.lang.Class<? extends org.apache.ibatis.io.VFS> vfs)
Sets the VFS.- Parameters:
vfs
- a VFS
-
getCache
public org.apache.ibatis.cache.Cache getCache()
Gets the Cache.- Returns:
- a specified Cache
-
setCache
public void setCache(org.apache.ibatis.cache.Cache cache)
Sets the Cache.- Parameters:
cache
- a Cache
-
setPlugins
public void setPlugins(org.apache.ibatis.plugin.Interceptor... plugins)
Mybatis plugin list.- Parameters:
plugins
- list of plugins- Since:
- 1.0.1
-
setTypeAliasesPackage
public void setTypeAliasesPackage(java.lang.String typeAliasesPackage)
Packages to search for type aliases.Since 2.0.1, allow to specify a wildcard such as
com.example.*.model
.- Parameters:
typeAliasesPackage
- package to scan for domain objects- Since:
- 1.0.1
-
setTypeAliasesSuperType
public void setTypeAliasesSuperType(java.lang.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.- Parameters:
typeAliasesSuperType
- super class for domain objects- Since:
- 1.1.2
-
setTypeHandlersPackage
public void setTypeHandlersPackage(java.lang.String typeHandlersPackage)
Packages to search for type handlers.Since 2.0.1, allow to specify a wildcard such as
com.example.*.typehandler
.- 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 withMappedTypes
and optionally withMappedJdbcTypes
- Parameters:
typeHandlers
- Type handler list- Since:
- 1.0.1
-
setTypeAliases
public void setTypeAliases(java.lang.Class<?>... typeAliases)
List of type aliases to register. They can be annotated withAlias
- 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.- Parameters:
failFast
- enable failFast- Since:
- 1.0.1
-
setConfigLocation
public void setConfigLocation(org.springframework.core.io.Resource configLocation)
Set the location of the MyBatisSqlSessionFactory
config file. A typical value is "WEB-INF/mybatis-configuration.xml".- Parameters:
configLocation
- a location the MyBatis config file
-
setConfiguration
public void setConfiguration(org.apache.ibatis.session.Configuration configuration)
Set a customized MyBatis configuration.- Parameters:
configuration
- MyBatis configuration- Since:
- 1.3.0
-
setMapperLocations
public void setMapperLocations(org.springframework.core.io.Resource... mapperLocations)
Set locations of MyBatis mapper files that are going to be merged into theSqlSessionFactory
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".- Parameters:
mapperLocations
- location of MyBatis mapper files
-
setConfigurationProperties
public void setConfigurationProperties(java.util.Properties sqlSessionFactoryProperties)
Set optional properties to be passed into the SqlSession configuration, as alternative to a<properties>
tag in the configuration xml file. This will be used to resolve placeholders in the config file.- Parameters:
sqlSessionFactoryProperties
- optional properties for the SqlSessionFactory
-
setDataSource
public void setDataSource(javax.sql.DataSource dataSource)
Set the JDBCDataSource
that this instance should manage transactions for. TheDataSource
should match the one used by theSqlSessionFactory
: for example, you could specify the same JNDI DataSource for both. A transactional JDBCConnection
for thisDataSource
will be provided to application code accessing thisDataSource
directly viaDataSourceUtils
orDataSourceTransactionManager
. TheDataSource
specified here should be the targetDataSource
to manage transactions for, not aTransactionAwareDataSourceProxy
. Only data access code may work withTransactionAwareDataSourceProxy
, while the transaction manager needs to work on the underlying targetDataSource
. If there's nevertheless aTransactionAwareDataSourceProxy
passed in, it will be unwrapped to extract its targetDataSource
.- Parameters:
dataSource
- a JDBCDataSource
-
setSqlSessionFactoryBuilder
public void setSqlSessionFactoryBuilder(org.apache.ibatis.session.SqlSessionFactoryBuilder sqlSessionFactoryBuilder)
Sets theSqlSessionFactoryBuilder
to use when creating theSqlSessionFactory
. This is mainly meant for testing so that mock SqlSessionFactory classes can be injected. By default,SqlSessionFactoryBuilder
createsDefaultSqlSessionFactory
instances.- Parameters:
sqlSessionFactoryBuilder
- a SqlSessionFactoryBuilder
-
setTransactionFactory
public void setTransactionFactory(org.apache.ibatis.transaction.TransactionFactory transactionFactory)
Set the MyBatis TransactionFactory to use. Default isSpringManagedTransactionFactory
The defaultSpringManagedTransactionFactory
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 defaultTransactionFactory
. If not used, any attempt at getting an SqlSession through Spring's MyBatis framework will throw an exception if a transaction is active.- Parameters:
transactionFactory
- the MyBatis TransactionFactory- See Also:
SpringManagedTransactionFactory
-
setEnvironment
public void setEnvironment(java.lang.String environment)
NOTE: This class overrides anyEnvironment
you have set in the MyBatis config file. This is used only as a placeholder name. The default value isSqlSessionFactoryBean.class.getSimpleName()
.- Parameters:
environment
- the environment name
-
setScriptingLanguageDrivers
public void setScriptingLanguageDrivers(org.apache.ibatis.scripting.LanguageDriver... scriptingLanguageDrivers)
Set scripting language drivers.- Parameters:
scriptingLanguageDrivers
- scripting language drivers- Since:
- 2.0.2
-
setDefaultScriptingLanguageDriver
public void setDefaultScriptingLanguageDriver(java.lang.Class<? extends org.apache.ibatis.scripting.LanguageDriver> defaultScriptingLanguageDriver)
Set a default scripting language driver class.- Parameters:
defaultScriptingLanguageDriver
- A default scripting language driver class- Since:
- 2.0.2
-
afterPropertiesSet
public void afterPropertiesSet() throws java.lang.Exception
- Specified by:
afterPropertiesSet
in interfaceorg.springframework.beans.factory.InitializingBean
- Throws:
java.lang.Exception
-
buildSqlSessionFactory
protected org.apache.ibatis.session.SqlSessionFactory buildSqlSessionFactory() throws java.lang.Exception
Build aSqlSessionFactory
instance. The default implementation uses the standard MyBatisXMLConfigBuilder
API to build aSqlSessionFactory
instance based on a Reader. Since 1.3.0, it can be specified aConfiguration
instance directly(without config file).- Returns:
- SqlSessionFactory
- Throws:
java.lang.Exception
- if configuration is failed
-
getObject
public org.apache.ibatis.session.SqlSessionFactory getObject() throws java.lang.Exception
- Specified by:
getObject
in interfaceorg.springframework.beans.factory.FactoryBean<org.apache.ibatis.session.SqlSessionFactory>
- Throws:
java.lang.Exception
-
getObjectType
public java.lang.Class<? extends org.apache.ibatis.session.SqlSessionFactory> getObjectType()
- Specified by:
getObjectType
in interfaceorg.springframework.beans.factory.FactoryBean<org.apache.ibatis.session.SqlSessionFactory>
-
isSingleton
public boolean isSingleton()
- Specified by:
isSingleton
in interfaceorg.springframework.beans.factory.FactoryBean<org.apache.ibatis.session.SqlSessionFactory>
-
onApplicationEvent
public void onApplicationEvent(org.springframework.context.ApplicationEvent event)
- Specified by:
onApplicationEvent
in interfaceorg.springframework.context.ApplicationListener<org.springframework.context.ApplicationEvent>
-
-