Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 32 additions & 40 deletions src/site/zh/xdoc/factorybean.xml
Original file line number Diff line number Diff line change
Expand Up @@ -29,25 +29,25 @@
<body>
<section name="SqlSessionFactoryBean">
<p>
在基本的 MyBatis 中,session 工厂可以使用 SqlSessionFactoryBuilder 来创建。而在
MyBatis-Spring 中,则使用 SqlSessionFactoryBean 来替代
在基础的MyBatis中,通过SqlSessionFactoryBuilder来创建SqlSessionFactory。而在
MyBatis-Spring中,则使用SqlSessionFactoryBean来创建
</p>

<subsection name="Setup">
<p>
要创建工厂 bean,放置下面的代码在 Spring 的 XML 配置文件中:
要创建工厂bean,将下面的代码放到Spring的XML配置文件中:
</p>
<source><![CDATA[
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>]]></source>
<p>
要注意 SqlSessionFactoryBean 实现了 Spring 的 FactoryBean 接口(see <a href="https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-factory-extension-factorybean">the Spring documentation(Core Technologies -Customizing instantiation logic with a FactoryBean-)</a>)
这就说明了由 Spring 最终创建的 bean 不是 SqlSessionFactoryBean 本身,。
而是工厂类的 getObject()返回的方法的结果。这种情况下,Spring 将会在应用启动时为你
创建 SqlSessionFactory 对象,然后将它以 SqlSessionFactory 为名来存储。在 Java 中,
相同的代码是:
</p>

<p>
需要注意的是SqlSessionFactoryBean实现了Spring的FactoryBean接口(可查看官方文档<a href="https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-factory-extension-factorybean">通过工厂bean自定义实例化逻辑</a>)。这意味着由Spring最终创建的bean并不是SqlSessionFactoryBean本身,
而是工厂类(SqlSessionFactoryBean)的 getObject()方法的返回结果。这种情况下Spring
将会在应用启动时为你创建SqlSessionFactory的bean对象,然后将其名字设为sqlSessionFactory。
在 Java 中的等效代码如下:
</p>

<source><![CDATA[
@Bean
Expand All @@ -58,47 +58,40 @@ public SqlSessionFactory sqlSessionFactory() {
}]]></source>

<p>
在一般的 MyBatis-Spring 用法中,
你不需要直接使用 SqlSessionFactoryBean 或和其对
应的 SqlSessionFactory。相反,session 工厂将会被注入到 MapperFactoryBean 或其它扩
展了 SqlSessionDaoSupport 的 DAO(Data Access Object,数据访问对象,译者注)中。
在通常的MyBatis-Spring 用法中,你不需要直接使用SqlSessionFactoryBean或对
应的SqlSessionFactory。相反,session的工厂bean将会被注入到MapperFactoryBean或其它扩
展了SqlSessionDaoSupport的DAO(Data Access Object,数据访问对象,译者注)中。
</p>
</subsection>

<subsection name="属性">

<p>
SqlSessionFactory 有一个单独的必须属性,就是 JDBC 的 DataSource。这可以是任意
的 DataSource,其配置应该和其它 Spring 数据库连接是一样的
SqlSessionFactory有一个唯一的必要属性:用于JDBC的DataSource。这可以是任意
的DataSource对象,它的配置应该和其它Spring数据库连接是一样的
</p>

<p>
一个通用的属性是 configLocation,它是用来指定 MyBatis 的 XML 配置文件路径的。
如果基本的 MyBatis 配置需要改变,
那么这就是一个需要它的地方。
通常这会是<code>&lt;settings&gt;</code>
一个通用的属性是configLocation,它用来指定MyBatis的XML配置文件路径。
如果需要修改MyBatis的基础配置,那么它就有用了。通常这会是<code>&lt;settings&gt;</code>
或<code>&lt;typeAliases&gt;</code>的部分。
</p>

<p>
要注意这个配置文件不需要是一个完整的 MyBatis 配置。确切地说,任意环境,数据源
和 MyBatis 的事务管理器都会被忽略。SqlSessionFactoryBean 会创建它自己的,使用这些
值定制 MyBatis 的 Environment 时是需要的
需要注意的是,这个配置文件并不需要是一个完整的MyBatis配置。确切地说,任何环境,数据源
和MyBatis的事务管理器都会被忽略。SqlSessionFactoryBean会创建它自己的,使用这些
值定制MyBatis的Environment时是需要的
</p>

<p>
如果 MyBatis 映射器 XML 文件在和映射器类相同的路径下不存在,那么另外一个需要
配置文件的原因就是它了。使用这个配置,有两种选择。第一是手动在 MyBatis 的 XML 配
置文件中使用&lt;mappers&gt;部分来指定类路径。第二是使用工厂 bean 的 mapperLocations 属
性。
如果MyBatis在映射器类对应的路径下不存在与之相应的映射器XML文件,那么此时也需要配置文件。
有两种方式来使用配置:第一种是是手动在MyBatis的XML配置文件中使用&lt;mappers&gt;部分来
指定类路径;第二种是使用工厂bean的mapperLocations属性。
</p>

<p>
mapperLocations 属性使用一个资源位置的 list。
这个属性可以用来指定 MyBatis 的 XML
映射器文件的位置。
它的值可以包含 Ant 样式来加载一个目录中所有文件,
或者从基路径下
mapperLocations属性使用list来表示资源位置。这个属性可以用来指定MyBatis的XML
映射器文件的位置。它的值可以包含Ant样式来加载一个目录中所有文件,或者从基路径下
递归搜索所有路径。比如:
</p>

Expand All @@ -109,17 +102,16 @@ mapperLocations 属性使用一个资源位置的 list。
</bean>]]></source>

<p>
这会从类路径下加载在 sample.config.mappers 包和它的子包中所有的 MyBatis 映射器
XML 文件。
这会从类路径下加载在sample.config.mappers包和它的子包中所有的MyBatis映射器XML文件。
</p>

<p>
在容器环境管理事务中,一个可能需要的属性是 transactionFactoryClass。请参考
第四章(4.2 节)中来查看有关部分
在容器环境管理事务中,一个可能需要的属性是transactionFactoryClass。请参考第四章(4.2 节)中来查看有关部分。
如果你正在使用多数据库功能,那么就需要设置databaseIdProvider属性
</p>

<p>
In case you are using the multi-db feature you will need to set the <code>databaseIdProvider</code> property:
如果你使用了多数据库,那么需要设置<code>databaseIdProvider</code>属性:
</p>

<source><![CDATA[
Expand All @@ -142,9 +134,9 @@ XML 文件。

<p>
<span class="label important">NOTE</span>
Since 1.3.0, <code>configuration</code> property has been added.
It can be specified a <code>Configuration</code> instance directly without MyBatis XML configuration file.
For example:
自1.3.0版本开始添加<code>configuration</code>属性。
它能够在没有MyBatis对应的XML配置文件的情况下直接指定<code>Configuration</code>实例。
举个栗子:
</p>

<source><![CDATA[
Expand Down
39 changes: 15 additions & 24 deletions src/site/zh/xdoc/getting-started.xml.vm
Original file line number Diff line number Diff line change
Expand Up @@ -29,18 +29,17 @@
<body>
<section name="第二章 入门">
<p>
本章将会以简略的步骤告诉你如何安装和创建 MyBatis-Spring,并构建一个简单的数据
访问事务性的应用程序。
本章将会以简略的步骤告诉你如何安装和创建 MyBatis-Spring,并构建一个简单的数据访问事务性的应用程序。
</p>

<subsection name="Installation">
<p>
要使用 MyBatis-Spring 模块,你只需要包含
要使用MyBatis-Spring模块,只需要在类路径下包含
<code>mybatis-spring-${project.version}.jar</code>
文 件就可以了,并在类路径中加入相关的依赖
文件和相关依赖
</p>
<p>
如果你使用 Maven,那么在 pom.xml 中加入下面的代码即可:
如果使用Maven,仅需要在pom.xml中加入以下代码即可:
</p>
<source><![CDATA[
<dependency>
Expand All @@ -52,13 +51,11 @@

<subsection name="Quick Setup">
<p>
要和 Spring 一起使用 MyBatis,你需要在 Spring 应用上下文中定义至少两样东西:一个
SqlSessionFactory 和至少一个数据映射器类。
要和Spring一起使用MyBatis,需要在Spring应用上下文中定义至少两样东西:一个SqlSessionFactory和至少一个数据映射器类。
</p>

<p>
在 MyBatis-Spring 中,SqlSessionFactoryBean 是用于创建 SqlSessionFactory 的。要
配置这个工厂 bean,放置下面的代码在 Spring 的 配置文件中:
在MyBatis-Spring中,可使用SqlSessionFactoryBean来创建SqlSessionFactory。要配置这个工厂bean,只需要把下面代码放在Spring的XML配置文件中:
</p>

<source><![CDATA[
Expand All @@ -75,21 +72,19 @@ public SqlSessionFactoryBean sqlSessionFactory() throws Exception {
}]]></source>

<p>
要注意 SqlSessionFactory 需要一个 DataSource(数据源,译者注)
。这可以是任意
的 DataSource,配置它就和配置其它 Spring 数据库连接一样。
需要注意的是:SqlSessionFactory需要一个DataSource(数据源,译者注)。这可以是任意的DataSource,配置它就和配置其它Spring数据库连接一样。
</p>

<p>
假设你定义了一个如下的数据 mapper 接口:
假设你定义了一个如下的mapper接口:
</p>
<source><![CDATA[public interface UserMapper {
@Select("SELECT * FROM users WHERE id = #{userId}")
User getUser(@Param("userId") String userId);
} ]]></source>

<p>
那么可以使用 MapperFactoryBean,像下面这样来把接口加入到 Spring 中:
那么可以通过MapperFactoryBean像下面那样把接口加入到Spring中:
</p>

<source><![CDATA[
Expand All @@ -99,30 +94,26 @@ public SqlSessionFactoryBean sqlSessionFactory() throws Exception {
</bean>]]></source>

<p>
要注意,所指定的映射器类必须是一个接口,而不是具体的实现类。在这个示例中,注
解被用来指定 SQL 语句,但是 MyBatis 的映射器 XML 文件也可以用。
需要注意的是:所指定的映射器类必须是一个接口,而不是具体的实现类。在这个示例中通过注解来指定SQL语句,但是通过MyBatis映射器的XML文件也行。
</p>

<p>
一旦配置好,你可以用注入其它任意 Spring 的 bean 相同的方式直接注入映射器到你的
business/service 对象中。MapperFactoryBean 处理 SqlSession 的创建和关闭它。如果使用
了 Spring 的事务,那么当事务完成时,session 将会提交或回滚。最终,任何异常都会被翻
译成 Spring 的 DataAccessException 异常。
一旦完成配置,你可以像其它Spring中的bean注入方法将映射器到业务(bussiness)或服务(service)对象中。MapperFactoryBean用来处理SqlSession的创建和关闭动作。
如果使用了Spring的事务,那么当事务完成时,session将会被提交或回滚。最终任何异常都会被翻译成Spring的DataAccessException异常。
</p>

<p>
If you use the Java Configuration:
如果你使用Java代码来配置:
</p>

<source><![CDATA[
<source><![CDATA[
@Bean
public UserMapper userMapper() throws Exception {
SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory());
return sqlSessionTemplate.getMapper(UserMapper.class);
}]]></source>

<p>
调用 MyBatis 数据方法现在只需一行代码:
调用MyBatis数据方法现在只需一行代码:
</p>
<source><![CDATA[
public class FooServiceImpl implements FooService {
Expand Down