Skip to content

Commit 23814c6

Browse files
committed
Removing more parameterType attributes and some info for the autoMapping
attribute [ci skip]
1 parent a2d55d2 commit 23814c6

File tree

5 files changed

+149
-76
lines changed

5 files changed

+149
-76
lines changed

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

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -302,12 +302,12 @@ ps.setInt(1,id);]]></source>
302302

303303
<p>A continuación se muestran unos ejemplos de insert, update y delete.</p>
304304

305-
<source><![CDATA[<insert id="insertAuthor" parameterType="domain.blog.Author">
305+
<source><![CDATA[<insert id="insertAuthor">
306306
insert into Author (id,username,password,email,bio)
307307
values (#{id},#{username},#{password},#{email},#{bio})
308308
</insert>
309309
310-
<update id="updateAuthor" parameterType="domain.blog.Author">
310+
<update id="updateAuthor">
311311
update Author set
312312
username = #{username},
313313
password = #{password},
@@ -316,7 +316,7 @@ ps.setInt(1,id);]]></source>
316316
where id = #{id}
317317
</update>
318318
319-
<delete id="deleteAuthor" parameterType="int">
319+
<delete id="deleteAuthor">
320320
delete from Author where id = #{id}
321321
</delete>]]></source>
322322

@@ -328,7 +328,7 @@ ps.setInt(1,id);]]></source>
328328
Por ejemplo, si la columna id de la tabla Author del ejemplo siguiente fuera autogenerada el insert statement se escribiría de la siguiente forma:
329329
</p>
330330

331-
<source><![CDATA[<insert id="insertAuthor" parameterType="domain.blog.Author" useGeneratedKeys="true"
331+
<source><![CDATA[<insert id="insertAuthor" useGeneratedKeys="true"
332332
keyProperty="id">
333333
insert into Author (username,password,email,bio)
334334
values (#{username},#{password},#{email},#{bio})
@@ -339,7 +339,7 @@ Por ejemplo, si la columna id de la tabla Author del ejemplo siguiente fuera aut
339339

340340
<p>A continuación se muestra un ejemplo muy simple que genera un id aleatorio (algo que posiblemente nunca harás pero que demuestra la flexibilidad de MyBatis y cómo MyBatis ignora la forma en la que se consigue la clave):
341341
</p>
342-
<source><![CDATA[<insert id="insertAuthor" parameterType="domain.blog.Author">
342+
<source><![CDATA[<insert id="insertAuthor">
343343
<selectKey keyProperty="id" resultType="int" order="BEFORE">
344344
select CAST(RANDOM()*1000000 as INTEGER) a from SYSIBM.SYSDUMMY1
345345
</selectKey>
@@ -399,7 +399,7 @@ Por ejemplo, si la columna id de la tabla Author del ejemplo siguiente fuera aut
399399
<p>Este fragmento de SQL puede ser incluido en otra sentencia, por ejemplo:
400400
</p>
401401

402-
<source><![CDATA[<select id="selectUsers" parameterType="int" resultType="hashmap">
402+
<source><![CDATA[<select id="selectUsers" resultType="map">
403403
select <include refid="userColumns"/>
404404
from some_table
405405
where id = #{id}
@@ -410,7 +410,7 @@ Por ejemplo, si la columna id de la tabla Author del ejemplo siguiente fuera aut
410410
<p>En todos los statements anteriores se han mostrado ejemplos de parámetros simples. Los parámetros son elementos muy potentes en MyBatis. En los casos simples, probablemente el 90% de los casos, no hay mucho que decir sobre ellos, por ejemplo:
411411
</p>
412412

413-
<source><![CDATA[<select id="selectUsers" parameterType="int" resultType="User">
413+
<source><![CDATA[<select id="selectUsers" resultType="User">
414414
select id, username, password
415415
from users
416416
where id = #{id}
@@ -419,7 +419,7 @@ Por ejemplo, si la columna id de la tabla Author del ejemplo siguiente fuera aut
419419
<p>El ejemplo anterior muestra un mapeo muy simple de parámetro con nombre. El atributo parameterType se ha informado a “int”, por lo tanto el nombre del parámetro puede ser cualquiera. Los tipos primitivos y los tipos de datos simples como Integer o String no tienen propiedades relevantes y por tanto el parámetro será reemplazado por su valor. Sin embargo, si pasas un objeto complejo, entonces el comportamiento es distinto. Por ejemplo:
420420
</p>
421421

422-
<source><![CDATA[<insert id="insertUser" parameterType="User" >
422+
<source><![CDATA[<insert id="insertUser" parameterType="User">
423423
insert into users (id, username, password)
424424
values (#{id}, #{username}, #{password})
425425
</insert>]]></source>
@@ -498,7 +498,7 @@ Por ejemplo, si la columna id de la tabla Author del ejemplo siguiente fuera aut
498498
<p>Ya has visto algunos ejemplos de un statement sencillo que no requiere un ResultMap explícito. Por ejemplo:
499499
</p>
500500

501-
<source><![CDATA[<select id="selectUsers" parameterType="int" resultType="hashmap">
501+
<source><![CDATA[<select id="selectUsers" resultType="map">
502502
select id, username, hashedPassword
503503
from some_table
504504
where id = #{id}
@@ -541,7 +541,7 @@ public class User {
541541
Este JavaBean puede mapearse desde un ResultSet de forma casi tan sencilla como la HashMap.
542542
</p>
543543

544-
<source><![CDATA[<select id="selectUsers" parameterType="int" resultType="com.someapp.model.User">
544+
<source><![CDATA[<select id="selectUsers" resultType="com.someapp.model.User">
545545
select id, username, hashedPassword
546546
from some_table
547547
where id = #{id}
@@ -554,7 +554,7 @@ public class User {
554554
<typeAlias type="com.someapp.model.User" alias="User"/>
555555
556556
<!-- In SQL Mapping XML file -->
557-
<select id="selectUsers" parameterType="int" resultType="User">
557+
<select id="selectUsers" resultType="User">
558558
select id, username, hashedPassword
559559
from some_table
560560
where id = #{id}
@@ -564,7 +564,7 @@ public class User {
564564
En estos casos MyBatis crea automáticamente un RestulMap entre bastidores para mapear las columnas a las propiedades del JavaBean en base a sus nombres. Si los nombres de las columnas no coinciden exactamente, puedes emplear alias en los nombres de columnas de la sentencia SQL (una característica estándar del SQL) para hacer que coincidan. Por ejemplo:
565565
</p>
566566

567-
<source><![CDATA[<select id="selectUsers" parameterType="int" resultType="User">
567+
<source><![CDATA[<select id="selectUsers" resultType="User">
568568
select
569569
user_id as "id",
570570
user_name as "userName",
@@ -587,7 +587,7 @@ public class User {
587587
Y el statement que las referencia utiliza para ello el atributo resultMap (fíjate que hemos eliminado el atributo resultType). Por ejemplo:
588588
</p>
589589

590-
<source><![CDATA[<select id="selectUsers" parameterType="int" resultMap="userResultMap">
590+
<source><![CDATA[<select id="selectUsers" resultMap="userResultMap">
591591
select user_id, user_name, hashed_password
592592
from some_table
593593
where id = #{id}
@@ -606,7 +606,7 @@ public class User {
606606
<p>Por ejemplo, ¿cómo mapearías este statement?</p>
607607

608608
<source><![CDATA[<!-- Very Complex Statement -->
609-
<select id="selectBlogDetails" parameterType="int" resultMap="detailedBlogResultMap">
609+
<select id="selectBlogDetails" resultMap="detailedBlogResultMap">
610610
select
611611
B.id as blog_id,
612612
B.title as blog_title,
@@ -1497,7 +1497,7 @@ SELECT * FROM POST WHERE BLOG_ID = #{id}]]></source>
14971497
presentes en el ResultSet y que no tienen un mapeo manual se auto-mapearán. Posteriormente se procesarán los mapeos manuales.
14981498
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>
14991499

1500-
<source><![CDATA[<select id="selectUsers" parameterType="int" resultType="User">
1500+
<source><![CDATA[<select id="selectUsers" resultType="User">
15011501
select
15021502
user_id as "id",
15031503
user_name as "userName",
@@ -1554,6 +1554,21 @@ SELECT * FROM POST WHERE BLOG_ID = #{id}]]></source>
15541554
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.
15551555
Por tanto usa la opción <code>FULL</code> con cuidado.
15561556
</p>
1557+
1558+
<p>
1559+
Independientemente del nivel de auto-mapeo configurado puedes activar o desactivar el auto-mapeo para un statement especifico
1560+
añadiendole el atributo<code>autoMapping</code>:
1561+
</p>
1562+
1563+
<source><![CDATA[<select id="selectUsers" resultType="User" autoMapping="false">
1564+
select
1565+
user_id as "id",
1566+
user_name as "userName",
1567+
hashed_password
1568+
from some_table
1569+
where id = #{id}
1570+
</select>]]></source>
1571+
15571572

15581573
</subsection>
15591574
<subsection name="cache">

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

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -340,12 +340,12 @@ ps.setInt(1,id);]]></source>
340340

341341
<p>以下、insert, update, delete ステートメントの例をいくつか挙げておきます。</p>
342342

343-
<source><![CDATA[<insert id="insertAuthor" parameterType="domain.blog.Author">
343+
<source><![CDATA[<insert id="insertAuthor">
344344
insert into Author (id,username,password,email,bio)
345345
values (#{id},#{username},#{password},#{email},#{bio})
346346
</insert>
347347
348-
<update id="updateAuthor" parameterType="domain.blog.Author">
348+
<update id="updateAuthor">
349349
update Author set
350350
username = #{username},
351351
password = #{password},
@@ -354,7 +354,7 @@ ps.setInt(1,id);]]></source>
354354
where id = #{id}
355355
</update>
356356
357-
<delete id="deleteAuthor" parameterType="int">
357+
<delete id="deleteAuthor">
358358
delete from Author where id = #{id}
359359
</delete>]]></source>
360360

@@ -367,7 +367,7 @@ ps.setInt(1,id);]]></source>
367367
例えば上記の Author テーブルで id 列に自動生成が設定されていた場合、ステートメントは次のように書くことができます。
368368
</p>
369369

370-
<source><![CDATA[<insert id="insertAuthor" parameterType="domain.blog.Author" useGeneratedKeys="true"
370+
<source><![CDATA[<insert id="insertAuthor" useGeneratedKeys="true"
371371
keyProperty="id">
372372
insert into Author (username,password,email,bio)
373373
values (#{username},#{password},#{email},#{bio})
@@ -380,7 +380,7 @@ ps.setInt(1,id);]]></source>
380380
<p>
381381
全く実用的ではありませんが、MyBatis の柔軟さを示す意味も込めて、ID をランダムに生成する例を挙げておきます。
382382
</p>
383-
<source><![CDATA[<insert id="insertAuthor" parameterType="domain.blog.Author">
383+
<source><![CDATA[<insert id="insertAuthor">
384384
<selectKey keyProperty="id" resultType="int" order="BEFORE">
385385
select CAST(RANDOM()*1000000 as INTEGER) a from SYSIBM.SYSDUMMY1
386386
</selectKey>
@@ -452,7 +452,7 @@ ps.setInt(1,id);]]></source>
452452
上記の SQL スニペットを他のステートメントにインクルードするには、次のように記述します。
453453
</p>
454454

455-
<source><![CDATA[<select id="selectUsers" parameterType="int" resultType="hashmap">
455+
<source><![CDATA[<select id="selectUsers" resultType="map">
456456
select <include refid="userColumns"/>
457457
from some_table
458458
where id = #{id}
@@ -465,7 +465,7 @@ ps.setInt(1,id);]]></source>
465465
例:
466466
</p>
467467

468-
<source><![CDATA[<select id="selectUsers" parameterType="int" resultType="User">
468+
<source><![CDATA[<select id="selectUsers" resultType="User">
469469
select id, username, password
470470
from users
471471
where id = #{id}
@@ -476,7 +476,7 @@ ps.setInt(1,id);]]></source>
476476
パラメーターとして複合型を渡した場合はもう少し複雑です。次の例を見てください。
477477
</p>
478478

479-
<source><![CDATA[<insert id="insertUser" parameterType="User" >
479+
<source><![CDATA[<insert id="insertUser" parameterType="User">
480480
insert into users (id, username, password)
481481
values (#{id}, #{username}, #{password})
482482
</insert>]]></source>
@@ -575,7 +575,7 @@ ps.setInt(1,id);]]></source>
575575
例:
576576
</p>
577577

578-
<source><![CDATA[<select id="selectUsers" parameterType="int" resultType="hashmap">
578+
<source><![CDATA[<select id="selectUsers" resultType="map">
579579
select id, username, hashedPassword
580580
from some_table
581581
where id = #{id}
@@ -622,7 +622,7 @@ public class User {
622622
このような条件を満たす JavaBean であれば、HashMap のときと同じように ResultSet にマップすることができます。
623623
</p>
624624

625-
<source><![CDATA[<select id="selectUsers" parameterType="int" resultType="com.someapp.model.User">
625+
<source><![CDATA[<select id="selectUsers" resultType="com.someapp.model.User">
626626
select id, username, hashedPassword
627627
from some_table
628628
where id = #{id}
@@ -636,7 +636,7 @@ public class User {
636636
<typeAlias type="com.someapp.model.User" alias="User"/>
637637
638638
<!-- In SQL Mapping XML file -->
639-
<select id="selectUsers" parameterType="int" resultType="User">
639+
<select id="selectUsers" resultType="User">
640640
select id, username, hashedPassword
641641
from some_table
642642
where id = #{id}
@@ -647,7 +647,7 @@ public class User {
647647
もし列名が一致しない場合、select 文で列に別名をつけることで対応可能です(列の別名は標準 SQL の機能です)。
648648
</p>
649649

650-
<source><![CDATA[<select id="selectUsers" parameterType="int" resultType="User">
650+
<source><![CDATA[<select id="selectUsers" resultType="User">
651651
select
652652
user_id as "id",
653653
user_name as "userName",
@@ -672,7 +672,7 @@ public class User {
672672
そして、resultMap 属性を使って定義した ResultMap を参照するステートメントは以下のようになります(resultType 属性は削除しています)。
673673
</p>
674674

675-
<source><![CDATA[<select id="selectUsers" parameterType="int" resultMap="userResultMap">
675+
<source><![CDATA[<select id="selectUsers" resultMap="userResultMap">
676676
select user_id, user_name, hashed_password
677677
from some_table
678678
where id = #{id}
@@ -695,7 +695,7 @@ public class User {
695695
<p>例えば、こんなステートメントをどうやってマップすれば良いのでしょう?</p>
696696

697697
<source><![CDATA[<!-- Very Complex Statement -->
698-
<select id="selectBlogDetails" parameterType="int" resultMap="detailedBlogResultMap">
698+
<select id="selectBlogDetails" resultMap="detailedBlogResultMap">
699699
select
700700
B.id as blog_id,
701701
B.title as blog_title,
@@ -1720,7 +1720,7 @@ SELECT * FROM POST WHERE BLOG_ID = #{id}]]></source>
17201720
次の例では、<i>hashed_password</i> 列が password プロパティにマップされ、<i>id</i> と <i>userName</i> 列が自動マッピングの対象となります。
17211721
</p>
17221722

1723-
<source><![CDATA[<select id="selectUsers" parameterType="int" resultType="User">
1723+
<source><![CDATA[<select id="selectUsers" resultType="User">
17241724
select
17251725
user_id as "id",
17261726
user_name as "userName",
@@ -1777,6 +1777,21 @@ SELECT * FROM POST WHERE BLOG_ID = #{id}]]></source>
17771777
自動マッピングで <code>FULL</code> を指定する場合は、こうした意図しないマッピングが行われないように注意する必要があります。
17781778
</p>
17791779

1780+
1781+
<p>
1782+
Regardless of the auto-mapping level configured you can enable or disable the automapping for an specific statement
1783+
by adding the attribute <code>autoMapping</code> to it:
1784+
</p>
1785+
1786+
<source><![CDATA[<select id="selectUsers" resultType="User" autoMapping="false">
1787+
select
1788+
user_id as "id",
1789+
user_name as "userName",
1790+
hashed_password
1791+
from some_table
1792+
where id = #{id}
1793+
</select>]]></source>
1794+
17801795
</subsection>
17811796

17821797
<subsection name="cache">

0 commit comments

Comments
 (0)