Skip to content

Commit

Permalink
Update documentation for gh-484
Browse files Browse the repository at this point in the history
Related with gh-476
  • Loading branch information
kazuki43zoo committed Jun 21, 2020
1 parent 6b4c5e8 commit c1b267d
Show file tree
Hide file tree
Showing 5 changed files with 166 additions and 121 deletions.
73 changes: 41 additions & 32 deletions src/site/es/xdoc/mappers.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright 2010-2019 the original author or authors.
Copyright 2010-2020 the original author or authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -30,7 +30,7 @@
<section name="Inyectar mappers">
<p>
En lugar de codificar DAOs (data access objects) manualmente usando la clase
<code>SqlSessionDaoSupport</code> o <code>SqlSessionTemplate</code>, Mybatis-Spring
<code>SqlSessionDaoSupport</code> o <code>SqlSessionTemplate</code>, Mybatis-Spring
puede crear un mapper thread-safe que puedes inyectar directamente en otros beans.
</p>

Expand All @@ -54,45 +54,45 @@
}
}]]></source>
<p>
Observa que no se usa la <code>SqlSession</code> ni ninguna otra referencia a MyBatis en este código.
Observa que no se usa la <code>SqlSession</code> ni ninguna otra referencia a MyBatis en este código.
No es necesario ni siquiera crear o cerrar la sesión, MyBatis-Spring se encarga de ello.
</p>

<subsection name="Registrar un mapper" id="register">

<p>
La forma de registrar un mapper varía según si quieres usar la configuración XML clásica o la nueva Java Config de Spring 3.0+
La forma de registrar un mapper varía según si quieres usar la configuración XML clásica o la nueva Java Config de Spring 3.0+
(También conocida como @Configuration).</p>

<h4>Con confiugración XML</h4>

<p>
Un mapper se registra en Spring incluyendo un <code>MapperFactoryBean</code> en tu fichero de configuración XML, de la siguiente forma:
</p>
<source><![CDATA[<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="org.mybatis.spring.sample.mapper.UserMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>]]></source>

<p>
Si el mapper UserMapper tiene un fichero XML de mapeo asociado el <code>MapperFactoryBean</code>
lo cargará automáticamente. Por lo tanto no es necesario especificar dicho mapper en el fichero
Si el mapper UserMapper tiene un fichero XML de mapeo asociado el <code>MapperFactoryBean</code>
lo cargará automáticamente. Por lo tanto no es necesario especificar dicho mapper en el fichero
de configuración de MyBatis a no ser que los ficheros XML estén en una lugar distinto del classpath.
Ver la sección de <code>SqlSessionFactoryBean</code> y la propiedad
<code><a href="factorybean.html">configLocation</a></code>
para más información.
</p>

<p>
El <code>MapperFactoryBean</code> requiere o un
El <code>MapperFactoryBean</code> requiere o un
<code>SqlSessionFactory</code> o un <code>SqlSessionTemplate</code>.
Ambos se pueden informar usando sendas propiedades <code>sqlSessionFactory</code> y
<code>sqlSessionTemplate</code>.
Si ambas propiedades han sdo informadas la <code>SqlSessionFactory</code> se ignora.
Dado que un <code>SqlSessionTemplate</code> debe tener un session factory
dicho factory se usará por el <code>MapperFactoryBean</code>.
</p>

<h4>Con Java Config</h4>

<source><![CDATA[
Expand All @@ -107,10 +107,10 @@ public MapperFactoryBean<UserMapper> userMapper() throws Exception {

<subsection name="Escanear mappers" id="scan">
<p>
No es necesario registrar los mappers uno por uno en el fichero XML de Spring.
No es necesario registrar los mappers uno por uno en el fichero XML de Spring.
En lugar de esto, puede dejar que MyBatis-Spring los busque en tu classpath.
</p>

<p>
Hay tres formas distintas de hacerlo:
</p>
Expand All @@ -119,7 +119,7 @@ public MapperFactoryBean<UserMapper> userMapper() throws Exception {
<li>Usando la anotación <code>@MapperScan</code></li>
<li>Usando un fichero clásico XML de configuración de Spring y añadiendo el bean <code>MapperScannerConfigurer</code></li>
</ul>

<p>Tango <code>&lt;mybatis:scan/&gt;</code> como <code>@MapperScan</code> son características añadidas en MyBatis-Spring 1.2.0.
<code>@MapperScan</code> requiere Spring 3.1+.</p>

Expand Down Expand Up @@ -151,13 +151,22 @@ public interface GoodsMapper {
// ...
}]]></source>

<p>
Since 2.0.6, the develop become can specified scope of mapper using mapper scanning feature option(<code>default-scope</code>)
and scope annotation(<code>@Scope</code>, <code>@RefreshScope</code>, etc ...).
The motivation for adding this option is supporting the <code>refresh</code> scope provided by the Spring Cloud.
The default of this option is empty (= equiv to specify the <code>singleton</code> scope).
The <code>default-scope</code> apply to the mapper bean(<code>MapperFactoryBean</code>) when scope of scanned bean definition
is <code>singleton</code>(default scope) and create a scoped proxy bean for scanned mapper when final scope is not <code>singleton</code>.
</p>

<h4>&lt;mybatis:scan/&gt;</h4>

<p>
El elemento XML <code>&lt;mybatis:scan/&gt;</code> busca mappers de una forma muy similar a cómo
<code>&lt;context:component-scan/&gt;</code> busca beans.
</p>

<p>A continuación se muestra un fichero XML de configuración:</p>

<source><![CDATA[<beans xmlns="http://www.springframework.org/schema/beans"
Expand All @@ -166,7 +175,7 @@ public interface GoodsMapper {
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd">
<mybatis:scan base-package="org.mybatis.spring.sample.mapper" />
<!-- ... -->
Expand All @@ -182,15 +191,15 @@ public interface GoodsMapper {
<p>
Fíjate que no es necesario indicar una <code>SqlSessionFactory</code> o
<code>SqlSessionTemplate</code> porque el <code>&lt;mybatis:scan/&gt;</code>
creará <code>MapperFactoryBean</code>s que pueden ser autowired. Pero si usas más de un <code>DataSource</code>
creará <code>MapperFactoryBean</code>s que pueden ser autowired. Pero si usas más de un <code>DataSource</code>
el autowire puede que no te funcione. En este caso puedes usar las propiedades <code>factory-ref</code> or
<code>template-ref</code> para indicar los beans correctos a utilizar.
</p>

<p>
<code>&lt;mybatis:scan/&gt;</code> soporta el filtrado de mappers mediante una interfaz marcador o una anotación.
La propiedad <code>annotation</code> especifica la anotación que se debe buscar.
La propiedad <code>marker-interface</code> especifica la interfaz a buscar.
La propiedad <code>marker-interface</code> especifica la interfaz a buscar.
Si se indican ambas se añadirán todos los mappers que cumplan <strong>cualquier</strong> criterio.
Por defecto ambas propiedades son null asi que todos los interfaces de los paquetes base serán cargados como mappers.
</p>
Expand All @@ -206,31 +215,31 @@ public interface GoodsMapper {
</p>

<p>
<span class="label important">NOTE</span> <code>&lt;context:component-scan/&gt;</code>
<span class="label important">NOTE</span> <code>&lt;context:component-scan/&gt;</code>
no puede encontrar y registrar mappers. Los mappers son interfaces y, para poderlos registrar en Spring,
el scanner deben conocer cómo crear un <code>MapperFactoryBean</code> para cada interfaz encontrado.
</p>

<h4>@MapperScan</h4>

<p>
Si usas la Java Configuration de Spring (@Configuration) posiblemente prefieras usar
<code>@MapperScan</code> en lugar de <code>&lt;mybatis:scan/&gt;</code>.
Si usas la Java Configuration de Spring (@Configuration) posiblemente prefieras usar
<code>@MapperScan</code> en lugar de <code>&lt;mybatis:scan/&gt;</code>.
</p>

<p>La anotación <code>@MapperScan</code> se usa de la siguiente forma:</p>

<source><![CDATA[@Configuration
@MapperScan("org.mybatis.spring.sample.mapper")
public class AppConfig {
// ...
}
]]></source>

<p>
La anotación fucniona exactamente igual que <code>&lt;mybatis:scan/&gt;</code> que hemos visto en la sección anterior.
También te permite especificar un interfaz marcador o una anotación mediante sus propiedades
<code>markerInterface</code> y <code>annotationClass</code>.
También te permite especificar un interfaz marcador o una anotación mediante sus propiedades
<code>markerInterface</code> y <code>annotationClass</code>.
Tambien puedes indicar una <code>SqlSessionFactory</code> o un <code>SqlSessionTemplate</code> específicos
mediante las propiedades <code>sqlSessionFactory</code> y <code>sqlSessionTemplate</code>.
</p>
Expand All @@ -240,9 +249,9 @@ public class AppConfig {
</p>

<h4>MapperScannerConfigurer</h4>

<p>
<code>MapperScannerConfigurer</code> es un <code>BeanDefinitionRegistryPostProcessor</code>
<code>MapperScannerConfigurer</code> es un <code>BeanDefinitionRegistryPostProcessor</code>
que se puede incluir como un bean normal en el fichero clásico XML de configuración de Spring.
Para configurar un <code>MapperScannerConfigurer</code> añade lo siguiente al fichero de configuración de Spring:
</p>
Expand All @@ -256,7 +265,7 @@ public class AppConfig {
por ello se usa el atributo <code>value</code> en lugar del habitual <code>ref</code>:
</p>
<source><![CDATA[<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />]]></source>

</subsection>
</section>
</body>
Expand Down
45 changes: 27 additions & 18 deletions src/site/ja/xdoc/mappers.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
<title>MyBatis-Spring | Mapper をインジェクト(注入)する</title>
<author email="hpresnall@gmail.com">Hunter Presnall</author>
<author email="eduardo.macarron@gmail.com">Eduardo Macarron</author>
<author email="harawata@gmail.com">Iwao AVE!</author>
<author email="harawata@gmail.com">Iwao AVE!</author>
</properties>

<body>
Expand All @@ -37,7 +37,7 @@
<source><![CDATA[<bean id="fooService" class="org.mybatis.spring.sample.service.FooServiceImpl">
<constructor-arg ref="userMapper" />
</bean>]]></source>

<p>
アプリケーション側の処理では、注入された Mapper のメソッドを呼び出すだけです。
</p>
Expand All @@ -61,9 +61,9 @@
<subsection name="Mapper の登録" id="register">
<p>
Mapper を Bean として登録する方法は、Spring の設定を XML ファイルを使って行う場合と Spring 3.0 以降で導入された Java Config (= @Configuration) を使う場合で異なります。</p>

<h4>XML で設定する場合</h4>

<p>
XML ファイルを使って Spring を設定する場合、次のように <code>MapperFactoryBean</code> のエントリーを追加することで Mapper を Spring Bean として登録することができます。
</p>
Expand All @@ -83,9 +83,9 @@
指定対象のプロパティは、それぞれ <code>sqlSessionFactory</code> と <code>sqlSessionTemplate</code> です。
両方が指定された場合、 <code>SqlSessionFactory</code> の指定は無視され、<code>SqlSessionTemplate</code> の登録時に指定した Session Factory が使われます。
</p>

<h4>Java Config で設定する場合</h4>

<source><![CDATA[
@Bean
public MapperFactoryBean<UserMapper> userMapper() throws Exception {
Expand All @@ -98,9 +98,9 @@ public MapperFactoryBean<UserMapper> userMapper() throws Exception {

<subsection name="Mapper の自動検出" id="scan">
<p>
上で説明した方法では Mapper を個別に指定していましたが、MyBatis-Spring では特定のクラスパスに含まれる Mapper を自動検出させることもできます。
上で説明した方法では Mapper を個別に指定していましたが、MyBatis-Spring では特定のクラスパスに含まれる Mapper を自動検出させることもできます。
</p>

<p>
これには3通りの方法があります。
</p>
Expand All @@ -109,7 +109,7 @@ public MapperFactoryBean<UserMapper> userMapper() throws Exception {
<li><code>@MapperScan</code> アノテーションを使う。</li>
<li>Spring の XML 設定ファイルに <code>MapperScannerConfigurer</code> のエントリーを追加する。</li>
</ul>

<p><code>&lt;mybatis:scan/&gt;</code> または <code>@MapperScan</code> を使う場合は MyBatis-Spring 1.2.0 以降が必要です。また <code>@MapperScan</code> を使う場合は Spring 3.1 以降が必要となります。</p>

<p>
Expand Down Expand Up @@ -139,12 +139,21 @@ public interface GoodsMapper {
// ...
}]]></source>

<p>
2.0.6以降では、開発者はMapper BeanのスコープをMapperの自動検出機能のオプション(<code>default-scope</code>)
とスコープを指定するアノテーション(<code>@Scope</code> や <code>@RefreshScope</code> など)を使用して指定することができるようになります。
このオプションを追加する動機は、Spring Cloudから提供されている <code>refresh</code> スコープをサポートすることです。
このオプションのデフォルトは空(<code>singleton</code>スコープを指定するのと同等)です。
<code>default-scope</code> オプションで指定した値は、スキャンしたMapperのBean定義に指定されているスコープが <code>singleton</code> の際に適用され、
最終的なMapperのスコープが <code>singleton</code> でない場合はScoped ProxyのBeanを作成します。
</p>

<h4>&lt;mybatis:scan/&gt;</h4>

<p>
<code>&lt;mybatis:scan/&gt;</code> は、Spring の <code>&lt;context:component-scan/&gt;</code> が Bean を検索するのと良く似た方法で Mapper を検出します。
</p>

<p>XML 設定の例:</p>

<source><![CDATA[<beans xmlns="http://www.springframework.org/schema/beans"
Expand All @@ -153,7 +162,7 @@ public interface GoodsMapper {
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd">
<mybatis:scan base-package="org.mybatis.spring.sample.mapper" />
<!-- ... -->
Expand Down Expand Up @@ -192,20 +201,20 @@ public interface GoodsMapper {
</p>

<h4>@MapperScan</h4>

<p>
Java Config を使って Spring を設定しているのなら、<code>&lt;mybatis:scan/&gt;</code> よりも <code>@MapperScan</code> を使う方が気に入ると思います。
</p>

<p><code>@MapperScan</code> アノテーションは次のように使用します。</p>

<source><![CDATA[@Configuration
@MapperScan("org.mybatis.spring.sample.mapper")
public class AppConfig {
// ...
}
]]></source>

<p>
このアノテーションは前章で説明した <code>&lt;mybatis:scan/&gt;</code> と全く同じ要領で Mapper の検出を行います。
引数 <code>markerInterface</code>, <code>annotationClass</code> を使えば検出対象のマーカーインターフェイスとアノテーションを指定することもできますし、<code>sqlSessionFactory</code>, <code>sqlSessionTemplate</code> で <code>SqlSessionFactory</code> や <code>SqlSessionTemplate</code> を指定することができます。
Expand All @@ -216,7 +225,7 @@ public class AppConfig {
</p>

<h4>MapperScannerConfigurer</h4>

<p>
<code>MapperScannerConfigurer</code> は <code>BeanDefinitionRegistryPostProcessor</code> として定義されているので、従来の XML による設定で通常の Bean として登録することができます。
<code>MapperScannerConfigurer</code> の登録は次のように行います。
Expand All @@ -229,7 +238,7 @@ public class AppConfig {
特定の <code>sqlSessionFactory</code> または <code>sqlSessionTemplate</code> を指定する場合は、 Bean を参照ではなく <strong>名前で</strong> 指定する必要があるので、<code>ref</code> ではなく <code>value</code> を使います。
</p>
<source><![CDATA[<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />]]></source>

<p>
<span class="label important">NOTE</span> MyBatis-Spring 1.0.2 までは有効なプロパティは <code>sqlSessionFactoryBean</code> と <code>sqlSessionTemplateBean</code> のみでしたが、 <code>MapperScannerConfigurer</code> が <code>PropertyPlaceholderConfigurer</code> よりも先に読み込まれるためエラーの原因となっていました。
この問題を回避するため、これらのプロパティの使用は非推奨となり、新たに追加された <code>sqlSessionFactoryBeanName</code> と <code>sqlSessionTemplateBeanName</code> を使うことが推奨されています。
Expand Down
Loading

0 comments on commit c1b267d

Please sign in to comment.