Skip to content

Commit 9adc20a

Browse files
committed
Removed parameterType from samples in dynamic-sql page [ci skip]
1 parent f526f78 commit 9adc20a

File tree

5 files changed

+40
-45
lines changed

5 files changed

+40
-45
lines changed

src/site/es/xdoc/dynamic-sql.xml

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
<subsection name="if" id="if">
4141
<p>La tarea más frecuente en SQL dinámico es incluir un trozo de la clausula where condicionalmente. Por ejemplo:</p>
4242
<source><![CDATA[<select id="findActiveBlogWithTitleLike"
43-
parameterType="Blog" resultType="Blog">
43+
resultType="Blog">
4444
SELECT * FROM BLOG
4545
WHERE state = ‘ACTIVE’
4646
<if test="title != null">
@@ -50,7 +50,7 @@
5050
<p>Este statement proporciona una funcionalidad de búsqueda de texto. Si no se pasa ningún título, entonces se retornan todos los Blogs activos. Pero si se pasa un título se buscará un título como el pasado (para los perspicaces, sí, en este caso tu parámetro debe incluir el carácter de comodín).</p>
5151
<p>¿Y cómo hacemos si debemos buscar opcionalmente por título o autor? Primeramente, yo cambiaría el nombre del statement para que tenga algo más de sentido. Y luego añadir otra condición.</p>
5252
<source><![CDATA[<select id="findActiveBlogLike"
53-
parameterType="Blog" resultType="Blog">
53+
resultType="Blog">
5454
SELECT * FROM BLOG WHERE state = ‘ACTIVE’
5555
<if test="title != null">
5656
AND title like #{title}
@@ -64,7 +64,7 @@
6464
<p>En ocasiones no queremos usar una condición sino elegir una de entre varias opciones. De forma similar al switch de Java, MyBatis ofrece el elemento choose.</p>
6565
<p>Usemos el ejemplo anterior, pero ahora vamos a buscar solamente por título si se ha proporcionado un título y por autor si se ha proporcionado un autor. Si no se proporciona ninguno devolvemos una lista de Blogs destacados (quizá una lista seleccionada por los administradores en lugar de una gran lista de blogs sin sentido).</p>
6666
<source><![CDATA[<select id="findActiveBlogLike"
67-
parameterType="Blog" resultType="Blog">
67+
resultType="Blog">
6868
SELECT * FROM BLOG WHERE state = ‘ACTIVE’
6969
<choose>
7070
<when test="title != null">
@@ -82,7 +82,7 @@
8282
<subsection name="trim, where, set" id="trimWhereSet">
8383
<p>En los ejemplos anteriores se ha sorteado intencionadamente un notorio problema del SQL dinámico. Imagina lo que sucedería si volvemos a nuestro ejemplo del “if”, pero esta vez, hacemos que “ACTIVE = 1” sea también una condición dinámica.</p>
8484
<source><![CDATA[<select id="findActiveBlogLike"
85-
parameterType="Blog" resultType="Blog">
85+
resultType="Blog">
8686
SELECT * FROM BLOG
8787
WHERE
8888
<if test="state != null">
@@ -105,7 +105,7 @@ AND title like ‘someTitle’]]></source>
105105
<p>Y eso también fallará. Este problema no se resuelve fácil con condicionales, y si alguna vez tienes que hacerlo, posiblemente no quieras repetirlo nunca más.</p>
106106
<p>MyBatis tiene una respuesta sencilla que funcionará en el 90% de los casos. Y en los casos en los que no funciona puedes personalizarlo para hacerlo funcionar. Con un cambio simple, todo funciona correctamente:</p>
107107
<source><![CDATA[<select id="findActiveBlogLike"
108-
parameterType="Blog" resultType="Blog">
108+
resultType="Blog">
109109
SELECT * FROM BLOG
110110
<where>
111111
<if test="state != null">
@@ -126,8 +126,7 @@ AND title like ‘someTitle’]]></source>
126126
</trim>]]></source>
127127
<p>El atributo prefixOverrides acepta una lista de textos delimitados pro el carácter “| “ donde el espacio en blanco es relevante. El resultado es que se elimina cualquier cosa que se haya especificado en el atributo prefixOverrides, y que se inserta todo lo incluido en el atributo with.</p>
128128
<p>Hay una solución similar para updates dinámicos llamada set. El elemento set se pude usar para incluir dinámicamente columnas para modificar y dejar fuera las demás. Por ejemplo:</p>
129-
<source><![CDATA[<update id="updateAuthorIfNecessary"
130-
parameterType="domain.blog.Author">
129+
<source><![CDATA[<update id="updateAuthorIfNecessary">
131130
update Author
132131
<set>
133132
<if test="username != null">username=#{username},</if>
@@ -162,15 +161,15 @@ AND title like ‘someTitle’]]></source>
162161
<subsection name="bind">
163162
<p>El elemento <code>bind</code> te permite crear una variable a partir de una expresion OGNL y asociarla al contexto. Por ejemplo:</p>
164163
<source><![CDATA[
165-
<select id="selectBlogsLike" parameterType="Blog" resultType="Blog">
164+
<select id="selectBlogsLike" resultType="Blog">
166165
<bind name="pattern" value="'%' + _parameter.getTitle() + '%'" />
167166
SELECT * FROM BLOG
168167
WHERE title LIKE #{pattern}
169168
</select>]]></source>
170169
</subsection>
171170
<subsection name="Soporte de multiples vendedores de base de datos">
172171
<p>Si se ha configurado un databaseIdProvider la variable "_databaseId" estará disponible en el código dinámico, de esta forma puedes constrir distintas sntencias dependiendo del fabricante de la base de datos. Mira el siguiente ejemplo:</p>
173-
<source><![CDATA[<insert id="insert" parameterType="org.myapp.domain.User">
172+
<source><![CDATA[<insert id="insert">
174173
<selectKey keyProperty="id" resultType="int" order="BEFORE">
175174
<if test="_databaseId == 'oracle'">
176175
select seq_users.nextval from dual

src/site/ja/xdoc/dynamic-sql.xml

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
<subsection name="if" id="if">
4444
<p>動的 SQL で最も良く行うのが、次のように条件に応じて where 句に検索条件を追加する処理でしょう。</p>
4545
<source><![CDATA[<select id="findActiveBlogWithTitleLike"
46-
parameterType="Blog" resultType="Blog">
46+
resultType="Blog">
4747
SELECT * FROM BLOG
4848
WHERE state = ‘ACTIVE’
4949
<if test="title != null">
@@ -56,7 +56,7 @@
5656
ステートメント名を分かりやすいものに変更したら、あとは条件をもう一つ追加するだけです。
5757
</p>
5858
<source><![CDATA[<select id="findActiveBlogLike"
59-
parameterType="Blog" resultType="Blog">
59+
resultType="Blog">
6060
SELECT * FROM BLOG WHERE state = ‘ACTIVE’
6161
<if test="title != null">
6262
AND title like #{title}
@@ -70,7 +70,7 @@
7070
<p>全ての条件を適用する代わりに、多くの選択肢の中から一つを選んで適用したいという場合があります。</p>
7171
<p>引き続き上の例を使って、タイトルが指定されたらタイトルのみを条件として検索し、著者が指定されたら著者のみを条件として検索するようにしてみましょう。どちらも指定されなかった場合は注目のブログのみを返すようにしてみましょう(ランダムに選ばれた無意味なリストではなく、管理者が戦略的に選んだリストを返したいという要件があるのでしょう)。</p>
7272
<source><![CDATA[<select id="findActiveBlogLike"
73-
parameterType="Blog" resultType="Blog">
73+
resultType="Blog">
7474
SELECT * FROM BLOG WHERE state = ‘ACTIVE’
7575
<choose>
7676
<when test="title != null">
@@ -88,7 +88,7 @@
8888
<subsection name="trim, where, set" id="trimWhereSet">
8989
<p>ここまでの例題は動的 SQL の厄介な問題点を都合よく避けていました。もう一度 if の例に戻って、今度は "ACTIVE = 1" も動的な条件に変更してみましょう。</p>
9090
<source><![CDATA[<select id="findActiveBlogLike"
91-
parameterType="Blog" resultType="Blog">
91+
resultType="Blog">
9292
SELECT * FROM BLOG
9393
WHERE
9494
<if test="state != null">
@@ -111,7 +111,7 @@ AND title like ‘someTitle’]]></source>
111111
<p>これまた構文エラーで失敗するでしょう。動的 SQL の問題は単なる条件分岐だけで解決できるものではありません。自分で書いたことがある方なら、もう二度と書きたくないと思うはずです。</p>
112112
<p>MyBatis は約 90% のケースをうまく処理できる簡単な解決策を提供します。残りの 10% についても、カスタマイズすることで処理できるようになります。上記の例は、一箇所修正するだけで期待通りに動作するようになります。</p>
113113
<source><![CDATA[<select id="findActiveBlogLike"
114-
parameterType="Blog" resultType="Blog">
114+
resultType="Blog">
115115
SELECT * FROM BLOG
116116
<where>
117117
<if test="state != null">
@@ -132,8 +132,7 @@ AND title like ‘someTitle’]]></source>
132132
</trim>]]></source>
133133
<p><em>prefixOverrides</em> 属性にはパイプで区切られたオーバーライド対象の文字列を指定します。ここではスペースにも意味があります。trim 要素の <em>prefixOverrides</em> 属性のリストに含まれる文字列が先頭にあった場合は削除され、<em>prefix</em> 属性で指定された文字列は結果が空でない場合先頭に挿入されます。</p>
134134
<p>動的な update ステートメントのために同じような要素 <em>set</em> が用意されています。<em>set</em> 要素を使うと、アップデート対象の列を動的に追加することができます。例:</p>
135-
<source><![CDATA[<update id="updateAuthorIfNecessary"
136-
parameterType="domain.blog.Author">
135+
<source><![CDATA[<update id="updateAuthorIfNecessary">
137136
update Author
138137
<set>
139138
<if test="username != null">username=#{username},</if>
@@ -168,15 +167,15 @@ AND title like ‘someTitle’]]></source>
168167
<subsection name="bind">
169168
<p><code>bind</code> 要素を使うと、OGNL 式の結果を変数に格納し、その変数を SQL 文中で使用することができます。</p>
170169
<source><![CDATA[
171-
<select id="selectBlogsLike" parameterType="Blog" resultType="Blog">
170+
<select id="selectBlogsLike" resultType="Blog">
172171
<bind name="pattern" value="'%' + _parameter.getTitle() + '%'" />
173172
SELECT * FROM BLOG
174173
WHERE title LIKE #{pattern}
175174
</select>]]></source>
176175
</subsection>
177176
<subsection name="複数データベースのサポート">
178177
<p>databaseIdProvider が設定されている場合、条件式で "_databaseId" 変数が利用可能となります。この変数を使うと、実行時のデータベースに応じてステートメントを使い分けることができます。oracle と db2 で異なる select 文を発行する例を次に挙げておきます。</p>
179-
<source><![CDATA[<insert id="insert" parameterType="org.myapp.domain.User">
178+
<source><![CDATA[<insert id="insert">
180179
<selectKey keyProperty="id" resultType="int" order="BEFORE">
181180
<if test="_databaseId == 'oracle'">
182181
select seq_users.nextval from dual

src/site/ko/xdoc/dynamic-sql.xml

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
<subsection name="if" id="if">
4545
<p>동적 SQL 에서 가장 공통적으로 사용되는 것으로 where 의 일부로 포함될 수 있다. 예를 들면:</p>
4646
<source><![CDATA[<select id="findActiveBlogWithTitleLike"
47-
parameterType="Blog" resultType="Blog">
47+
resultType="Blog">
4848
SELECT * FROM BLOG
4949
WHERE state = ‘ACTIVE’
5050
<if test="title != null">
@@ -56,7 +56,7 @@
5656
<p>title 과 author 을 사용하여 검색하고 싶다면? 먼저, 의미가 좀더 잘 전달되도록 구문의 이름을 변경할 것이다. 그리고 다른
5757
조건을 추가한다.</p>
5858
<source><![CDATA[<select id="findActiveBlogLike"
59-
parameterType="Blog" resultType="Blog">
59+
resultType="Blog">
6060
SELECT * FROM BLOG WHERE state = ‘ACTIVE’
6161
<if test="title != null">
6262
AND title like #{title}
@@ -72,7 +72,7 @@ MyBatis 에서는 choose 요소를 제공한다.</p>
7272
<p>위 예제를 다시 사용해보자. 지금은 title 만으로 검색하고 author 가 있다면 그 값으로 검색된다. 둘다 제공하지 않는다면,
7373
featured 상태의 blog 가 리턴된다.</p>
7474
<source><![CDATA[<select id="findActiveBlogLike"
75-
parameterType="Blog" resultType="Blog">
75+
resultType="Blog">
7676
SELECT * FROM BLOG WHERE state = ‘ACTIVE’
7777
<choose>
7878
<when test="title != null">
@@ -90,7 +90,7 @@ featured 상태의 blog 가 리턴된다.</p>
9090
<subsection name="trim, where, set" id="trimWhereSet">
9191
<p>앞서 예제는 악명높게 다양한 요소가 사용된 동적 SQL 이다. “if” 예제를 사용해보자.</p>
9292
<source><![CDATA[<select id="findActiveBlogLike"
93-
parameterType="Blog" resultType="Blog">
93+
resultType="Blog">
9494
SELECT * FROM BLOG
9595
WHERE
9696
<if test="state != null">
@@ -114,7 +114,7 @@ AND title like ‘someTitle’]]></source>
114114
될 것이다.</p>
115115
<p>실패하지 않기 위해서 조금 수정해야 한다. 조금 수정하면 아마도 다음과 같을 것이다:</p>
116116
<source><![CDATA[<select id="findActiveBlogLike"
117-
parameterType="Blog" resultType="Blog">
117+
resultType="Blog">
118118
SELECT * FROM BLOG
119119
<where>
120120
<if test="state != null">
@@ -139,8 +139,7 @@ AND title like ‘someTitle’]]></source>
139139
명시된 것을 추가한다.</p>
140140
<p>다음 예제는 동적인 update 구문의 유사한 경우이다. set 요소는 update 하고자 하는 칼럼을 동적으로 포함시키기 위해
141141
사용될 수 있다. 예를 들어:</p>
142-
<source><![CDATA[<update id="updateAuthorIfNecessary"
143-
parameterType="domain.blog.Author">
142+
<source><![CDATA[<update id="updateAuthorIfNecessary">
144143
update Author
145144
<set>
146145
<if test="username != null">username=#{username},</if>
@@ -182,15 +181,15 @@ AND title like ‘someTitle’]]></source>
182181
<subsection name="bind">
183182
<p>The <code>bind</code> element lets you create a variable out of an OGNL expression and bind it to the context. For example:</p>
184183
<source><![CDATA[
185-
<select id="selectBlogsLike" parameterType="Blog" resultType="Blog">
184+
<select id="selectBlogsLike" resultType="Blog">
186185
<bind name="pattern" value="'%' + _parameter.getTitle() + '%'" />
187186
SELECT * FROM BLOG
188187
WHERE title LIKE #{pattern}
189188
</select>]]></source>
190189
</subsection>
191190
<subsection name="Multi-db vendor support">
192191
<p>"_databaseId" 변수로 설정된 databaseIdProvider가 동적인 코드에도 사용가능하다면, 데이터베이스 제품별로 서로다른 구문을 사용할 수 있다. 다음의 예제를 보라:</p>
193-
<source><![CDATA[<insert id="insert" parameterType="org.myapp.domain.User">
192+
<source><![CDATA[<insert id="insert">
194193
<selectKey keyProperty="id" resultType="int" order="BEFORE">
195194
<if test="_databaseId == 'oracle'">
196195
select seq_users.nextval from dual

src/site/xdoc/dynamic-sql.xml

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
<subsection name="if" id="if">
4040
<p>The most common thing to do in dynamic SQL is conditionally include a part of a where clause. For example:</p>
4141
<source><![CDATA[<select id="findActiveBlogWithTitleLike"
42-
parameterType="Blog" resultType="Blog">
42+
resultType="Blog">
4343
SELECT * FROM BLOG
4444
WHERE state = ‘ACTIVE’
4545
<if test="title != null">
@@ -49,7 +49,7 @@
4949
<p>This statement would provide an optional text search type of functionality. If you passed in no title, then all active Blogs would be returned. But if you do pass in a title, it will look for a title like that (for the keen eyed, yes in this case your parameter value would need to include any masking or wildcard characters).</p>
5050
<p>What if we wanted to optionally search by title and author? First, I’d change the name of the statement to make more sense. Then simply add another condition.</p>
5151
<source><![CDATA[<select id="findActiveBlogLike"
52-
parameterType="Blog" resultType="Blog">
52+
resultType="Blog">
5353
SELECT * FROM BLOG WHERE state = ‘ACTIVE’
5454
<if test="title != null">
5555
AND title like #{title}
@@ -63,7 +63,7 @@
6363
<p>Sometimes we don’t want all of the conditionals to apply, instead we want to choose only one case among many options. Similar to a switch statement in Java, MyBatis offers a choose element.</p>
6464
<p>Let’s use the example above, but now let’s search only on title if one is provided, then only by author if one is provided. If neither is provided, let’s only return featured blogs (perhaps a strategically list selected by administrators, instead of returning a huge meaningless list of random blogs).</p>
6565
<source><![CDATA[<select id="findActiveBlogLike"
66-
parameterType="Blog" resultType="Blog">
66+
resultType="Blog">
6767
SELECT * FROM BLOG WHERE state = ‘ACTIVE’
6868
<choose>
6969
<when test="title != null">
@@ -81,7 +81,7 @@
8181
<subsection name="trim, where, set" id="trimWhereSet">
8282
<p>The previous examples have been conveniently dancing around a notorious dynamic SQL challenge. Consider what would happen if we return to our "if" example, but this time we make "ACTIVE = 1" a dynamic condition as well.</p>
8383
<source><![CDATA[<select id="findActiveBlogLike"
84-
parameterType="Blog" resultType="Blog">
84+
resultType="Blog">
8585
SELECT * FROM BLOG
8686
WHERE
8787
<if test="state != null">
@@ -104,7 +104,7 @@ AND title like ‘someTitle’]]></source>
104104
<p>This would also fail. This problem is not easily solved with conditionals, and if you’ve ever had to write it, then you likely never want to do so again.</p>
105105
<p>MyBatis has a simple answer that will likely work in 90% of the cases. And in cases where it doesn’t, you can customize it so that it does. With one simple change, everything works fine:</p>
106106
<source><![CDATA[<select id="findActiveBlogLike"
107-
parameterType="Blog" resultType="Blog">
107+
resultType="Blog">
108108
SELECT * FROM BLOG
109109
<where>
110110
<if test="state != null">
@@ -125,8 +125,7 @@ AND title like ‘someTitle’]]></source>
125125
</trim>]]></source>
126126
<p>The <em>prefixOverrides</em> attribute takes a pipe delimited list of text to override, where whitespace <u>is</u> relevant. The result is the removal of anything specified in the <em>prefixOverrides</em> attribute, and the insertion of anything in the <em>prefix</em> attribute.</p>
127127
<p>There is a similar solution for dynamic update statements called <em>set</em>. The <em>set</em> element can be used to dynamically include columns to update, and leave out others. For example:</p>
128-
<source><![CDATA[<update id="updateAuthorIfNecessary"
129-
parameterType="domain.blog.Author">
128+
<source><![CDATA[<update id="updateAuthorIfNecessary">
130129
update Author
131130
<set>
132131
<if test="username != null">username=#{username},</if>
@@ -161,15 +160,15 @@ AND title like ‘someTitle’]]></source>
161160
<subsection name="bind">
162161
<p>The <code>bind</code> element lets you create a variable out of an OGNL expression and bind it to the context. For example:</p>
163162
<source><![CDATA[
164-
<select id="selectBlogsLike" parameterType="Blog" resultType="Blog">
163+
<select id="selectBlogsLike" resultType="Blog">
165164
<bind name="pattern" value="'%' + _parameter.getTitle() + '%'" />
166165
SELECT * FROM BLOG
167166
WHERE title LIKE #{pattern}
168167
</select>]]></source>
169168
</subsection>
170169
<subsection name="Multi-db vendor support">
171170
<p>If a databaseIdProvider was configured a "_databaseId" variable is available for dynamic code, so you can build different statements depending on database vendor. Have a look at the following example:</p>
172-
<source><![CDATA[<insert id="insert" parameterType="org.myapp.domain.User">
171+
<source><![CDATA[<insert id="insert">
173172
<selectKey keyProperty="id" resultType="int" order="BEFORE">
174173
<if test="_databaseId == 'oracle'">
175174
select seq_users.nextval from dual

0 commit comments

Comments
 (0)