1
1
<?xml version =" 1.0" encoding =" UTF-8" ?>
2
2
<!--
3
3
4
- Copyright 2010-2019 the original author or authors.
4
+ Copyright 2010-2020 the original author or authors.
5
5
6
6
Licensed under the Apache License, Version 2.0 (the "License");
7
7
you may not use this file except in compliance with the License.
30
30
<section name =" Inyectar mappers" >
31
31
<p >
32
32
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
34
34
puede crear un mapper thread-safe que puedes inyectar directamente en otros beans.
35
35
</p >
36
36
54
54
}
55
55
}]]> </source >
56
56
<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.
58
58
No es necesario ni siquiera crear o cerrar la sesión, MyBatis-Spring se encarga de ello.
59
59
</p >
60
60
61
61
<subsection name =" Registrar un mapper" id =" register" >
62
62
63
63
<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+
65
65
(También conocida como @Configuration).</p >
66
-
66
+
67
67
<h4 >Con confiugración XML</h4 >
68
-
68
+
69
69
<p >
70
70
Un mapper se registra en Spring incluyendo un <code >MapperFactoryBean</code > en tu fichero de configuración XML, de la siguiente forma:
71
71
</p >
72
72
<source ><![CDATA[ <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
73
73
<property name="mapperInterface" value="org.mybatis.spring.sample.mapper.UserMapper" />
74
74
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
75
75
</bean>]]> </source >
76
-
76
+
77
77
<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
80
80
de configuración de MyBatis a no ser que los ficheros XML estén en una lugar distinto del classpath.
81
81
Ver la sección de <code >SqlSessionFactoryBean</code > y la propiedad
82
82
<code ><a href =" factorybean.html" >configLocation</a ></code >
83
83
para más información.
84
84
</p >
85
85
86
86
<p >
87
- El <code >MapperFactoryBean</code > requiere o un
87
+ El <code >MapperFactoryBean</code > requiere o un
88
88
<code >SqlSessionFactory</code > o un <code >SqlSessionTemplate</code >.
89
89
Ambos se pueden informar usando sendas propiedades <code >sqlSessionFactory</code > y
90
90
<code >sqlSessionTemplate</code >.
91
91
Si ambas propiedades han sdo informadas la <code >SqlSessionFactory</code > se ignora.
92
92
Dado que un <code >SqlSessionTemplate</code > debe tener un session factory
93
93
dicho factory se usará por el <code >MapperFactoryBean</code >.
94
94
</p >
95
-
95
+
96
96
<h4 >Con Java Config</h4 >
97
97
98
98
<source ><![CDATA[
@@ -107,10 +107,10 @@ public MapperFactoryBean<UserMapper> userMapper() throws Exception {
107
107
108
108
<subsection name =" Escanear mappers" id =" scan" >
109
109
<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.
111
111
En lugar de esto, puede dejar que MyBatis-Spring los busque en tu classpath.
112
112
</p >
113
-
113
+
114
114
<p >
115
115
Hay tres formas distintas de hacerlo:
116
116
</p >
@@ -119,7 +119,7 @@ public MapperFactoryBean<UserMapper> userMapper() throws Exception {
119
119
<li >Usando la anotación <code >@MapperScan</code ></li >
120
120
<li >Usando un fichero clásico XML de configuración de Spring y añadiendo el bean <code >MapperScannerConfigurer</code ></li >
121
121
</ul >
122
-
122
+
123
123
<p >Tango <code >< mybatis:scan/> </code > como <code >@MapperScan</code > son características añadidas en MyBatis-Spring 1.2.0.
124
124
<code >@MapperScan</code > requiere Spring 3.1+.</p >
125
125
@@ -151,13 +151,22 @@ public interface GoodsMapper {
151
151
// ...
152
152
}]]> </source >
153
153
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
+
154
163
<h4 >< mybatis:scan/> </h4 >
155
-
164
+
156
165
<p >
157
166
El elemento XML <code >< mybatis:scan/> </code > busca mappers de una forma muy similar a cómo
158
167
<code >< context:component-scan/> </code > busca beans.
159
168
</p >
160
-
169
+
161
170
<p >A continuación se muestra un fichero XML de configuración:</p >
162
171
163
172
<source ><![CDATA[ <beans xmlns="http://www.springframework.org/schema/beans"
@@ -166,7 +175,7 @@ public interface GoodsMapper {
166
175
xsi:schemaLocation="
167
176
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
168
177
http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd">
169
-
178
+
170
179
<mybatis:scan base-package="org.mybatis.spring.sample.mapper" />
171
180
172
181
<!-- ... -->
@@ -182,15 +191,15 @@ public interface GoodsMapper {
182
191
<p >
183
192
Fíjate que no es necesario indicar una <code >SqlSessionFactory</code > o
184
193
<code >SqlSessionTemplate</code > porque el <code >< mybatis:scan/> </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 >
186
195
el autowire puede que no te funcione. En este caso puedes usar las propiedades <code >factory-ref</code > or
187
196
<code >template-ref</code > para indicar los beans correctos a utilizar.
188
197
</p >
189
-
198
+
190
199
<p >
191
200
<code >< mybatis:scan/> </code > soporta el filtrado de mappers mediante una interfaz marcador o una anotación.
192
201
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.
194
203
Si se indican ambas se añadirán todos los mappers que cumplan <strong >cualquier</strong > criterio.
195
204
Por defecto ambas propiedades son null asi que todos los interfaces de los paquetes base serán cargados como mappers.
196
205
</p >
@@ -206,31 +215,31 @@ public interface GoodsMapper {
206
215
</p >
207
216
208
217
<p >
209
- <span class =" label important" >NOTE</span > <code >< context:component-scan/> </code >
218
+ <span class =" label important" >NOTE</span > <code >< context:component-scan/> </code >
210
219
no puede encontrar y registrar mappers. Los mappers son interfaces y, para poderlos registrar en Spring,
211
220
el scanner deben conocer cómo crear un <code >MapperFactoryBean</code > para cada interfaz encontrado.
212
221
</p >
213
222
214
223
<h4 >@MapperScan</h4 >
215
-
224
+
216
225
<p >
217
- Si usas la Java Configuration de Spring (@Configuration) posiblemente prefieras usar
218
- <code >@MapperScan</code > en lugar de <code >< mybatis:scan/> </code >.
226
+ Si usas la Java Configuration de Spring (@Configuration) posiblemente prefieras usar
227
+ <code >@MapperScan</code > en lugar de <code >< mybatis:scan/> </code >.
219
228
</p >
220
-
229
+
221
230
<p >La anotación <code >@MapperScan</code > se usa de la siguiente forma:</p >
222
-
231
+
223
232
<source ><![CDATA[ @Configuration
224
233
@MapperScan("org.mybatis.spring.sample.mapper")
225
234
public class AppConfig {
226
235
// ...
227
236
}
228
237
]]> </source >
229
-
238
+
230
239
<p >
231
240
La anotación fucniona exactamente igual que <code >< mybatis:scan/> </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 >.
234
243
Tambien puedes indicar una <code >SqlSessionFactory</code > o un <code >SqlSessionTemplate</code > específicos
235
244
mediante las propiedades <code >sqlSessionFactory</code > y <code >sqlSessionTemplate</code >.
236
245
</p >
@@ -240,9 +249,9 @@ public class AppConfig {
240
249
</p >
241
250
242
251
<h4 >MapperScannerConfigurer</h4 >
243
-
252
+
244
253
<p >
245
- <code >MapperScannerConfigurer</code > es un <code >BeanDefinitionRegistryPostProcessor</code >
254
+ <code >MapperScannerConfigurer</code > es un <code >BeanDefinitionRegistryPostProcessor</code >
246
255
que se puede incluir como un bean normal en el fichero clásico XML de configuración de Spring.
247
256
Para configurar un <code >MapperScannerConfigurer</code > añade lo siguiente al fichero de configuración de Spring:
248
257
</p >
@@ -256,7 +265,7 @@ public class AppConfig {
256
265
por ello se usa el atributo <code >value</code > en lugar del habitual <code >ref</code >:
257
266
</p >
258
267
<source ><![CDATA[ <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />]]> </source >
259
-
268
+
260
269
</subsection >
261
270
</section >
262
271
</body >
0 commit comments