SqlSessionFactoryBean
In base MyBatis, the SqlSessionFactory
is built using SqlSessionFactoryBuilder
. In MyBatis-Spring, SqlSessionFactoryBean
is used instead.
在基本的mybatis中,SqlSessionFactory
对象是使用SqlSessionFactoryBuilder
构建的,然而在mybatis-spring中,SqlSessionFactory
则是使用SqlSessionFactoryBean
构建
Setup
To create the factory bean, put the following in the Spring XML configuration file:
创建工厂bean,需要下面的语句添加到spring的xml配置文件当中
Note that SqlSessionFactoryBean
implements Spring's FactoryBean
interface (see the Spring documentation(Core Technologies -Customizing instantiation logic with a FactoryBean-)). This means that the bean Spring ultimately creates is not the SqlSessionFactoryBean
itself, but what the factory returns as a result of the getObject()
call on the factory. In this case, Spring will build an SqlSessionFactory
for you at application startup and store it with the name sqlSessionFactory
. In Java, the equivalent code would be:
注意:
SqlSessionFactoryBean
实现了spring的FactoryBean
接口(请参阅spring文档(Core Technologies使用FactoryBean
自定义实例化逻辑))
这意味着,spring最终创建的bean对象不是SqlSessionFactoryBean
本身,而是返回工厂调用getObject()方法生成的对象
在这情况下,spring会在程序启动时构建一个SqlSessionFactory
,并将其以sqlSessionFactory作为id存储
在java中,等效的代码如下:
@Bean
public SqlSessionFactory sqlSessionFactory() {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource());
return factoryBean.getObject();
}
In normal MyBatis-Spring usage, you will not need to use SqlSessionFactoryBean
or the corresponding SqlSessionFactory
directly. Instead, the session factory will be injected into MapperFactoryBean
s or other DAOs that extend SqlSessionDaoSupport
.
在正常的mybatis-string用法中,将不需要直接使用SqlSessionFactoryBean
或着相应的SqlSessionFactory
,取而代之的是 会话工厂 将会被注入MapperFactoryBean
s 或者其他继承SqlSessionDaoSupport
的数据访问对象;
Properties
SqlSessionFactory
has a single required property, the JDBC DataSource
. This can be any DataSource
and should be configured just like any other Spring database connection.
SqlSessionFactory
有一个必需的属性JDBCDataSource
。它可以是任何“DataSource”,并且应该像任何其他Spring数据库连接一样进行配置。
One common property is configLocation
which is used to specify the location of the MyBatis XML configuration file. One case where this is needed is if the base MyBatis configuration needs to be changed. Usually this will be
or
sections.
一个公共属性是“configLocation”,用于指定MyBatis XML配置文件的位置。如果需要更改基本MyBatis配置,则需要这样做。通常这将是“设置”或“类型别名”部分。
Note that this config file does not need to be a complete MyBatis config. Specifically, any environments, data sources and MyBatis transaction managers will be ignored . SqlSessionFactoryBean
creates its own, custom MyBatis Environment
with these values set as required.
注意,这个配置文件不需要是一个完整的MyBatis配置。具体来说,任何环境、数据源和MyBatis事务管理器都将被忽略。SqlSessionFactoryBean
创建自己的自定义MyBatisEnvironment
并根据需要设置这些值。
Another reason to require a config file is if the MyBatis mapper XML files are not in the same classpath location as the mapper classes. With this configuration, there are two options. This first is to manually specify the classpath of the XML files using a
section in the MyBatis config file. A second option is to use the mapperLocations
property of the factory bean.
需要配置文件的另一个原因是MyBatis映射器XML文件与映射器类不在同一个类路径位置。对于这种配置,有两种选择。首先,使用MyBatis配置文件中的“
The mapperLocations
property takes a list of resource locations. This property can be used to specify the location of MyBatis XML mapper files. The value can contain Ant-style patterns to load all files in a directory or to recursively search all paths from a base location. For example:
“mapperLocations”属性接受资源位置的列表。此属性可用于指定MyBatis XML映射器文件的位置。该值可以包含Ant样式的模式,用于加载目录中的所有文件或从基位置递归搜索所有路径。例如:
This will load all the MyBatis mapper XML files in the sample.config.mappers package and its sub-packages from the classpath.
`SqlSessionFactorThis将加载sample.config.mappers文件类路径中的包及其子包。
One property that may be required in an environment with container managed transactions is transactionFactoryClass
. Please see the relevant section in the Transactions chapter.
在具有容器管理事务的环境中,可能需要一个属性“transactionFactoryClass”。请参阅交易章节中的相关章节。
In case you are using the multi-db feature you will need to set the databaseIdProvider
property:
如果使用multi-db功能,则需要设置“databaseIdProvider”属性:
sqlserver
db2
oracle
mysql
NOTE Since 1.3.0, configuration
property has been added. It can be specified a Configuration
instance directly without MyBatis XML configuration file. For example:
注意从1.3.0开始,添加了“configuration”属性。它可以直接指定一个“Configuration”实例,而不需要MyBatis XML配置文件。例如: