Skip to content

Commit c1b267d

Browse files
committed
Update documentation for gh-484
Related with gh-476
1 parent 6b4c5e8 commit c1b267d

File tree

5 files changed

+166
-121
lines changed

5 files changed

+166
-121
lines changed

src/site/es/xdoc/mappers.xml

+41-32
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<!--
33
4-
Copyright 2010-2019 the original author or authors.
4+
Copyright 2010-2020 the original author or authors.
55
66
Licensed under the Apache License, Version 2.0 (the "License");
77
you may not use this file except in compliance with the License.
@@ -30,7 +30,7 @@
3030
<section name="Inyectar mappers">
3131
<p>
3232
En lugar de codificar DAOs (data access objects) manualmente usando la clase
33-
<code>SqlSessionDaoSupport</code> o <code>SqlSessionTemplate</code>, Mybatis-Spring
33+
<code>SqlSessionDaoSupport</code> o <code>SqlSessionTemplate</code>, Mybatis-Spring
3434
puede crear un mapper thread-safe que puedes inyectar directamente en otros beans.
3535
</p>
3636

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

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

6363
<p>
64-
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+
64+
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+
6565
(También conocida como @Configuration).</p>
66-
66+
6767
<h4>Con confiugración XML</h4>
68-
68+
6969
<p>
7070
Un mapper se registra en Spring incluyendo un <code>MapperFactoryBean</code> en tu fichero de configuración XML, de la siguiente forma:
7171
</p>
7272
<source><![CDATA[<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
7373
<property name="mapperInterface" value="org.mybatis.spring.sample.mapper.UserMapper" />
7474
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
7575
</bean>]]></source>
76-
76+
7777
<p>
78-
Si el mapper UserMapper tiene un fichero XML de mapeo asociado el <code>MapperFactoryBean</code>
79-
lo cargará automáticamente. Por lo tanto no es necesario especificar dicho mapper en el fichero
78+
Si el mapper UserMapper tiene un fichero XML de mapeo asociado el <code>MapperFactoryBean</code>
79+
lo cargará automáticamente. Por lo tanto no es necesario especificar dicho mapper en el fichero
8080
de configuración de MyBatis a no ser que los ficheros XML estén en una lugar distinto del classpath.
8181
Ver la sección de <code>SqlSessionFactoryBean</code> y la propiedad
8282
<code><a href="factorybean.html">configLocation</a></code>
8383
para más información.
8484
</p>
8585

8686
<p>
87-
El <code>MapperFactoryBean</code> requiere o un
87+
El <code>MapperFactoryBean</code> requiere o un
8888
<code>SqlSessionFactory</code> o un <code>SqlSessionTemplate</code>.
8989
Ambos se pueden informar usando sendas propiedades <code>sqlSessionFactory</code> y
9090
<code>sqlSessionTemplate</code>.
9191
Si ambas propiedades han sdo informadas la <code>SqlSessionFactory</code> se ignora.
9292
Dado que un <code>SqlSessionTemplate</code> debe tener un session factory
9393
dicho factory se usará por el <code>MapperFactoryBean</code>.
9494
</p>
95-
95+
9696
<h4>Con Java Config</h4>
9797

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

108108
<subsection name="Escanear mappers" id="scan">
109109
<p>
110-
No es necesario registrar los mappers uno por uno en el fichero XML de Spring.
110+
No es necesario registrar los mappers uno por uno en el fichero XML de Spring.
111111
En lugar de esto, puede dejar que MyBatis-Spring los busque en tu classpath.
112112
</p>
113-
113+
114114
<p>
115115
Hay tres formas distintas de hacerlo:
116116
</p>
@@ -119,7 +119,7 @@ public MapperFactoryBean<UserMapper> userMapper() throws Exception {
119119
<li>Usando la anotación <code>@MapperScan</code></li>
120120
<li>Usando un fichero clásico XML de configuración de Spring y añadiendo el bean <code>MapperScannerConfigurer</code></li>
121121
</ul>
122-
122+
123123
<p>Tango <code>&lt;mybatis:scan/&gt;</code> como <code>@MapperScan</code> son características añadidas en MyBatis-Spring 1.2.0.
124124
<code>@MapperScan</code> requiere Spring 3.1+.</p>
125125

@@ -151,13 +151,22 @@ public interface GoodsMapper {
151151
// ...
152152
}]]></source>
153153

154+
<p>
155+
Since 2.0.6, the develop become can specified scope of mapper using mapper scanning feature option(<code>default-scope</code>)
156+
and scope annotation(<code>@Scope</code>, <code>@RefreshScope</code>, etc ...).
157+
The motivation for adding this option is supporting the <code>refresh</code> scope provided by the Spring Cloud.
158+
The default of this option is empty (= equiv to specify the <code>singleton</code> scope).
159+
The <code>default-scope</code> apply to the mapper bean(<code>MapperFactoryBean</code>) when scope of scanned bean definition
160+
is <code>singleton</code>(default scope) and create a scoped proxy bean for scanned mapper when final scope is not <code>singleton</code>.
161+
</p>
162+
154163
<h4>&lt;mybatis:scan/&gt;</h4>
155-
164+
156165
<p>
157166
El elemento XML <code>&lt;mybatis:scan/&gt;</code> busca mappers de una forma muy similar a cómo
158167
<code>&lt;context:component-scan/&gt;</code> busca beans.
159168
</p>
160-
169+
161170
<p>A continuación se muestra un fichero XML de configuración:</p>
162171

163172
<source><![CDATA[<beans xmlns="http://www.springframework.org/schema/beans"
@@ -166,7 +175,7 @@ public interface GoodsMapper {
166175
xsi:schemaLocation="
167176
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
168177
http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd">
169-
178+
170179
<mybatis:scan base-package="org.mybatis.spring.sample.mapper" />
171180
172181
<!-- ... -->
@@ -182,15 +191,15 @@ public interface GoodsMapper {
182191
<p>
183192
Fíjate que no es necesario indicar una <code>SqlSessionFactory</code> o
184193
<code>SqlSessionTemplate</code> porque el <code>&lt;mybatis:scan/&gt;</code>
185-
creará <code>MapperFactoryBean</code>s que pueden ser autowired. Pero si usas más de un <code>DataSource</code>
194+
creará <code>MapperFactoryBean</code>s que pueden ser autowired. Pero si usas más de un <code>DataSource</code>
186195
el autowire puede que no te funcione. En este caso puedes usar las propiedades <code>factory-ref</code> or
187196
<code>template-ref</code> para indicar los beans correctos a utilizar.
188197
</p>
189-
198+
190199
<p>
191200
<code>&lt;mybatis:scan/&gt;</code> soporta el filtrado de mappers mediante una interfaz marcador o una anotación.
192201
La propiedad <code>annotation</code> especifica la anotación que se debe buscar.
193-
La propiedad <code>marker-interface</code> especifica la interfaz a buscar.
202+
La propiedad <code>marker-interface</code> especifica la interfaz a buscar.
194203
Si se indican ambas se añadirán todos los mappers que cumplan <strong>cualquier</strong> criterio.
195204
Por defecto ambas propiedades son null asi que todos los interfaces de los paquetes base serán cargados como mappers.
196205
</p>
@@ -206,31 +215,31 @@ public interface GoodsMapper {
206215
</p>
207216

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

214223
<h4>@MapperScan</h4>
215-
224+
216225
<p>
217-
Si usas la Java Configuration de Spring (@Configuration) posiblemente prefieras usar
218-
<code>@MapperScan</code> en lugar de <code>&lt;mybatis:scan/&gt;</code>.
226+
Si usas la Java Configuration de Spring (@Configuration) posiblemente prefieras usar
227+
<code>@MapperScan</code> en lugar de <code>&lt;mybatis:scan/&gt;</code>.
219228
</p>
220-
229+
221230
<p>La anotación <code>@MapperScan</code> se usa de la siguiente forma:</p>
222-
231+
223232
<source><![CDATA[@Configuration
224233
@MapperScan("org.mybatis.spring.sample.mapper")
225234
public class AppConfig {
226235
// ...
227236
}
228237
]]></source>
229-
238+
230239
<p>
231240
La anotación fucniona exactamente igual que <code>&lt;mybatis:scan/&gt;</code> que hemos visto en la sección anterior.
232-
También te permite especificar un interfaz marcador o una anotación mediante sus propiedades
233-
<code>markerInterface</code> y <code>annotationClass</code>.
241+
También te permite especificar un interfaz marcador o una anotación mediante sus propiedades
242+
<code>markerInterface</code> y <code>annotationClass</code>.
234243
Tambien puedes indicar una <code>SqlSessionFactory</code> o un <code>SqlSessionTemplate</code> específicos
235244
mediante las propiedades <code>sqlSessionFactory</code> y <code>sqlSessionTemplate</code>.
236245
</p>
@@ -240,9 +249,9 @@ public class AppConfig {
240249
</p>
241250

242251
<h4>MapperScannerConfigurer</h4>
243-
252+
244253
<p>
245-
<code>MapperScannerConfigurer</code> es un <code>BeanDefinitionRegistryPostProcessor</code>
254+
<code>MapperScannerConfigurer</code> es un <code>BeanDefinitionRegistryPostProcessor</code>
246255
que se puede incluir como un bean normal en el fichero clásico XML de configuración de Spring.
247256
Para configurar un <code>MapperScannerConfigurer</code> añade lo siguiente al fichero de configuración de Spring:
248257
</p>
@@ -256,7 +265,7 @@ public class AppConfig {
256265
por ello se usa el atributo <code>value</code> en lugar del habitual <code>ref</code>:
257266
</p>
258267
<source><![CDATA[<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />]]></source>
259-
268+
260269
</subsection>
261270
</section>
262271
</body>

src/site/ja/xdoc/mappers.xml

+27-18
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
<title>MyBatis-Spring | Mapper をインジェクト(注入)する</title>
2525
<author email="[email protected]">Hunter Presnall</author>
2626
<author email="[email protected]">Eduardo Macarron</author>
27-
<author email="[email protected]">Iwao AVE!</author>
27+
<author email="[email protected]">Iwao AVE!</author>
2828
</properties>
2929

3030
<body>
@@ -37,7 +37,7 @@
3737
<source><![CDATA[<bean id="fooService" class="org.mybatis.spring.sample.service.FooServiceImpl">
3838
<constructor-arg ref="userMapper" />
3939
</bean>]]></source>
40-
40+
4141
<p>
4242
アプリケーション側の処理では、注入された Mapper のメソッドを呼び出すだけです。
4343
</p>
@@ -61,9 +61,9 @@
6161
<subsection name="Mapper の登録" id="register">
6262
<p>
6363
Mapper を Bean として登録する方法は、Spring の設定を XML ファイルを使って行う場合と Spring 3.0 以降で導入された Java Config (= @Configuration) を使う場合で異なります。</p>
64-
64+
6565
<h4>XML で設定する場合</h4>
66-
66+
6767
<p>
6868
XML ファイルを使って Spring を設定する場合、次のように <code>MapperFactoryBean</code> のエントリーを追加することで Mapper を Spring Bean として登録することができます。
6969
</p>
@@ -83,9 +83,9 @@
8383
指定対象のプロパティは、それぞれ <code>sqlSessionFactory</code> と <code>sqlSessionTemplate</code> です。
8484
両方が指定された場合、 <code>SqlSessionFactory</code> の指定は無視され、<code>SqlSessionTemplate</code> の登録時に指定した Session Factory が使われます。
8585
</p>
86-
86+
8787
<h4>Java Config で設定する場合</h4>
88-
88+
8989
<source><![CDATA[
9090
@Bean
9191
public MapperFactoryBean<UserMapper> userMapper() throws Exception {
@@ -98,9 +98,9 @@ public MapperFactoryBean<UserMapper> userMapper() throws Exception {
9898

9999
<subsection name="Mapper の自動検出" id="scan">
100100
<p>
101-
上で説明した方法では Mapper を個別に指定していましたが、MyBatis-Spring では特定のクラスパスに含まれる Mapper を自動検出させることもできます。
101+
上で説明した方法では Mapper を個別に指定していましたが、MyBatis-Spring では特定のクラスパスに含まれる Mapper を自動検出させることもできます。
102102
</p>
103-
103+
104104
<p>
105105
これには3通りの方法があります。
106106
</p>
@@ -109,7 +109,7 @@ public MapperFactoryBean<UserMapper> userMapper() throws Exception {
109109
<li><code>@MapperScan</code> アノテーションを使う。</li>
110110
<li>Spring の XML 設定ファイルに <code>MapperScannerConfigurer</code> のエントリーを追加する。</li>
111111
</ul>
112-
112+
113113
<p><code>&lt;mybatis:scan/&gt;</code> または <code>@MapperScan</code> を使う場合は MyBatis-Spring 1.2.0 以降が必要です。また <code>@MapperScan</code> を使う場合は Spring 3.1 以降が必要となります。</p>
114114

115115
<p>
@@ -139,12 +139,21 @@ public interface GoodsMapper {
139139
// ...
140140
}]]></source>
141141

142+
<p>
143+
2.0.6以降では、開発者はMapper BeanのスコープをMapperの自動検出機能のオプション(<code>default-scope</code>)
144+
とスコープを指定するアノテーション(<code>@Scope</code> や <code>@RefreshScope</code> など)を使用して指定することができるようになります。
145+
このオプションを追加する動機は、Spring Cloudから提供されている <code>refresh</code> スコープをサポートすることです。
146+
このオプションのデフォルトは空(<code>singleton</code>スコープを指定するのと同等)です。
147+
<code>default-scope</code> オプションで指定した値は、スキャンしたMapperのBean定義に指定されているスコープが <code>singleton</code> の際に適用され、
148+
最終的なMapperのスコープが <code>singleton</code> でない場合はScoped ProxyのBeanを作成します。
149+
</p>
150+
142151
<h4>&lt;mybatis:scan/&gt;</h4>
143-
152+
144153
<p>
145154
<code>&lt;mybatis:scan/&gt;</code> は、Spring の <code>&lt;context:component-scan/&gt;</code> が Bean を検索するのと良く似た方法で Mapper を検出します。
146155
</p>
147-
156+
148157
<p>XML 設定の例:</p>
149158

150159
<source><![CDATA[<beans xmlns="http://www.springframework.org/schema/beans"
@@ -153,7 +162,7 @@ public interface GoodsMapper {
153162
xsi:schemaLocation="
154163
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
155164
http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd">
156-
165+
157166
<mybatis:scan base-package="org.mybatis.spring.sample.mapper" />
158167
159168
<!-- ... -->
@@ -192,20 +201,20 @@ public interface GoodsMapper {
192201
</p>
193202

194203
<h4>@MapperScan</h4>
195-
204+
196205
<p>
197206
Java Config を使って Spring を設定しているのなら、<code>&lt;mybatis:scan/&gt;</code> よりも <code>@MapperScan</code> を使う方が気に入ると思います。
198207
</p>
199-
208+
200209
<p><code>@MapperScan</code> アノテーションは次のように使用します。</p>
201-
210+
202211
<source><![CDATA[@Configuration
203212
@MapperScan("org.mybatis.spring.sample.mapper")
204213
public class AppConfig {
205214
// ...
206215
}
207216
]]></source>
208-
217+
209218
<p>
210219
このアノテーションは前章で説明した <code>&lt;mybatis:scan/&gt;</code> と全く同じ要領で Mapper の検出を行います。
211220
引数 <code>markerInterface</code>, <code>annotationClass</code> を使えば検出対象のマーカーインターフェイスとアノテーションを指定することもできますし、<code>sqlSessionFactory</code>, <code>sqlSessionTemplate</code> で <code>SqlSessionFactory</code> や <code>SqlSessionTemplate</code> を指定することができます。
@@ -216,7 +225,7 @@ public class AppConfig {
216225
</p>
217226

218227
<h4>MapperScannerConfigurer</h4>
219-
228+
220229
<p>
221230
<code>MapperScannerConfigurer</code> は <code>BeanDefinitionRegistryPostProcessor</code> として定義されているので、従来の XML による設定で通常の Bean として登録することができます。
222231
<code>MapperScannerConfigurer</code> の登録は次のように行います。
@@ -229,7 +238,7 @@ public class AppConfig {
229238
特定の <code>sqlSessionFactory</code> または <code>sqlSessionTemplate</code> を指定する場合は、 Bean を参照ではなく <strong>名前で</strong> 指定する必要があるので、<code>ref</code> ではなく <code>value</code> を使います。
230239
</p>
231240
<source><![CDATA[<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />]]></source>
232-
241+
233242
<p>
234243
<span class="label important">NOTE</span> MyBatis-Spring 1.0.2 までは有効なプロパティは <code>sqlSessionFactoryBean</code> と <code>sqlSessionTemplateBean</code> のみでしたが、 <code>MapperScannerConfigurer</code> が <code>PropertyPlaceholderConfigurer</code> よりも先に読み込まれるためエラーの原因となっていました。
235244
この問題を回避するため、これらのプロパティの使用は非推奨となり、新たに追加された <code>sqlSessionFactoryBeanName</code> と <code>sqlSessionTemplateBeanName</code> を使うことが推奨されています。

0 commit comments

Comments
 (0)