Skip to content

Commit 7ed01b1

Browse files
committed
auto-mapping section in spanish and minor fixes
1 parent ad77ac9 commit 7ed01b1

File tree

6 files changed

+90
-9
lines changed

6 files changed

+90
-9
lines changed

src/site/es/xdoc/java-api.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,10 +264,9 @@ try {
264264
Author selectAuthor(int id);
265265
// (List<Author>) selectList(“selectAuthors”)
266266
List<Author> selectAuthors();
267-
268267
// (Map<Integer,Author>) selectMap("selectAuthors", "id")
269268
@MapKey("id")
270-
List<Author> selectAuthorsAsMap();
269+
Map<Integer, Author> selectAuthors();
271270
// insert("insertAuthor", author)
272271
int insertAuthor(Author author);
273272
// updateAuthor("updateAuthor", author)

src/site/es/xdoc/sqlmap-xml.xml

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1310,6 +1310,90 @@ public class User {
13101310
<span class="label important">NOTA</span> Recuerda que todos estos son ResultMaps, y que si no indicas ningún result en ellos, MyBatis mapeará automáticamente las columnas a las propiedades por ti. Así que en muchos casos estos ejemplos son más verbosos de lo que realmente debieran ser. Dicho esto, la mayoría de las bases de datos son bastante complejas y muchas veces no podemos depender de ello para todos los casos.
13111311
</p>
13121312

1313+
</subsection>
1314+
<subsection name="Auto-mapeo">
1315+
1316+
<p>
1317+
Como ya has visto en las secciones previas, en los casos simples MyBatis puede auto-mapear los resultados por ti y en el resto de los casos
1318+
es posible que tengas que crear un result map. Pero, como verás en esta sección también puedes combinar ambas estrategias.
1319+
Veamos en detalle cómo funciona el auto-mapeo.
1320+
</p>
1321+
1322+
<p>
1323+
Al auto-mapear resultados MyBatis obtiene el nombre de columna y busca una propiedad con el mismo nombre sin tener en cuenta las mayúsculas.
1324+
Es decir, si se encuentra una columna <i>ID</i> y una propiedad <i>id</i>, MyBatis informará la propiedad <i>id</i> con el valor de la columna
1325+
<i>ID</i>.
1326+
</p>
1327+
1328+
<p>
1329+
Normalmente las columnas de base de datos se nombran usando mayúsculas y separando las palabras con un subrayado, mientras que las propiedades
1330+
java se nombran habitualmente siguiendo la notación tipo camelcase. Para habilitar el auto-mapeo entre ellas informa el parámetro de configuración
1331+
<code>mapUnderscoreToCamelCase</code> a true.
1332+
</p>
1333+
1334+
<p>
1335+
El auto-mapeo funciona incluso cuando hay un result map específico. Cuando esto sucede, para cada result map, todas las columnas que están
1336+
presentes en el ResultSet y que no tienen un mapeo manual se auto-mapearán. Posteriormente se procesarán los mapeos manuales.
1337+
En el siguiente ejemplo las columnas <i>id</i> y <i>userName</i> se auto-mapearán y la columna <i>hashed_password</i> se mapeará manualmente.</p>
1338+
1339+
<source><![CDATA[<select id="selectUsers" parameterType="int" resultType="User">
1340+
select
1341+
user_id as "id",
1342+
user_name as "userName",
1343+
hashed_password
1344+
from some_table
1345+
where id = #{id}
1346+
</select>]]></source>
1347+
1348+
<source><![CDATA[<resultMap id="userResultMap" type="User">
1349+
<result property="password" column="hashed_password"/>
1350+
</resultMap>]]></source>
1351+
1352+
<p>
1353+
Hay tres niveles de auto-mapeo:
1354+
</p>
1355+
1356+
<ul>
1357+
<li>
1358+
<code>NONE</code> - desactiva el auto-mapeo. Solo las propiedades mapeadas manaulmente se informarán.
1359+
</li>
1360+
<li>
1361+
<code>PARTIAL</code> - auto-mapea todos los resultados que no tienen un mapeo anidado definido en su interior (joins).
1362+
</li>
1363+
<li>
1364+
<code>FULL</code> - lo auto-mapea todo.
1365+
</li>
1366+
</ul>
1367+
1368+
<p>
1369+
El valor por defecto es <code>PARTIAL</code>, y hay una razón para ello. Cuandos se utiliza <code>FULL</code> el auto-mapeo se
1370+
realiza cuando se están procesando resultados de joins y las joins obtienen datos de distintas entidades en la misma fila
1371+
por lo tanto podrían producirse mapeos automáticos indeseados. Para comprender el riesgo observa el siguiente ejemplo:
1372+
</p>
1373+
1374+
<source><![CDATA[<select id="selectBlog" parameterType="int" resultMap="blogResult">
1375+
select
1376+
B.id,
1377+
B.title,
1378+
A.username,
1379+
from Blog B left outer join Author A on B.author_id = A.id
1380+
where B.id = #{id}
1381+
</select>]]></source>
1382+
1383+
<source><![CDATA[<resultMap id="blogResult" type="Blog">
1384+
<association property="author" javaType="Author" resultMap="authorResult"/>
1385+
</resultMap>
1386+
1387+
<resultMap id="authorResult" type="Author">
1388+
<result property="username" column="author_username"/>
1389+
</resultMap>]]></source>
1390+
1391+
<p>
1392+
Con este result map ambos <i>Blog</i> y <i>Author</i> se auto-mapearán. Pero fíjate que <i>Author</i> tiene un <i>id</i> y que hay una
1393+
columna con nombre <i>id</i> en el ResultSet por lo que el id de Author se rellenará con el id de Blog, y eso no era lo que esperabas.
1394+
Por tanto usa la opción <code>FULL</code> con cuidado.
1395+
</p>
1396+
13131397
</subsection>
13141398
<subsection name="cache">
13151399
<p>MyBatis incluye una funcionalidad de caché transaccional de segundo nivel muy potente que es ampliamente configurable y personalizable. Se han realizado muchos cambios en la caché de MyBatis 3 para hacer la a la vez más potente y más sencilla de configurar.

src/site/ja/xdoc/java-api.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,10 +265,9 @@ try {
265265
Author selectAuthor(int id);
266266
// (List<Author>) selectList(“selectAuthors”)
267267
List<Author> selectAuthors();
268-
269268
// (Map<Integer,Author>) selectMap("selectAuthors", "id")
270269
@MapKey("id")
271-
List<Author> selectAuthorsAsMap();
270+
Map<Integer, Author> selectAuthors();
272271
// insert("insertAuthor", author)
273272
int insertAuthor(Author author);
274273
// updateAuthor("updateAuthor", author)

src/site/xdoc/java-api.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ try {
273273
List<Author> selectAuthors();
274274
// (Map<Integer,Author>) selectMap("selectAuthors", "id")
275275
@MapKey("id")
276-
List<Author> selectAuthorsAsMap();
276+
Map<Integer, Author> selectAuthors();
277277
// insert("insertAuthor", author)
278278
int insertAuthor(Author author);
279279
// updateAuthor("updateAuthor", author)

src/site/xdoc/sqlmap-xml.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1688,7 +1688,7 @@ public class User {
16881688

16891689
<p>
16901690
When auto-mapping results MyBatis will get the column name and look for a property with the same name ignoring case. That means that if
1691-
a column named <i>ID</i> and property named <i>id</i> are found, MyBatis will set the id property with the <i>ID</i> column value.
1691+
a column named <i>ID</i> and property named <i>id</i> are found, MyBatis will set the <i>id</i> property with the <i>ID</i> column value.
16921692
</p>
16931693

16941694
<p>
@@ -1697,7 +1697,7 @@ public class User {
16971697
</p>
16981698

16991699
<p>
1700-
Auto-mapping works even when there is an specific result map. When this happens, for each result map all columns that are present in the
1700+
Auto-mapping works even when there is an specific result map. When this happens, for each result map, all columns that are present in the
17011701
ResultSet that have not a manual mapping will be auto-mapped, then manual mappings will be processed.
17021702
In the following sample <i>id</i> and <i>userName</i> columns will be auto-mapped and <i>hashed_password</i> column will be mapped.</p>
17031703

src/site/zh/xdoc/java-api.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -435,10 +435,9 @@ try {
435435
Author selectAuthor(int id);
436436
// (List<Author>) selectList(“selectAuthors”)
437437
List<Author> selectAuthors();
438-
439438
// (Map<Integer,Author>) selectMap("selectAuthors", "id")
440439
@MapKey("id")
441-
List<Author> selectAuthorsAsMap();
440+
Map<Integer, Author> selectAuthors();
442441
// insert("insertAuthor", author)
443442
int insertAuthor(Author author);
444443
// updateAuthor("updateAuthor", author)

0 commit comments

Comments
 (0)