SSMのMyBatisのフレームワーク[SSM]:動的SQL

MyBatisのの強力な機能の一つは、常に動的SQL機能となっています。動的SQL要素とユースJSTLまたは他の同様の類似したXMLベースのテキストプロセッサ。(注:以下は、他の構成の一例である部分一致)

1、もし:

必要性は、複数の条件を定義するために使用するが、この時点で、SQLコマンドを呼び出すときに動的にスプライスに使用されるラベルを使用する必要がある場合、いくつかの条件が、その中に入ってくる値を受け入れることが時々データクエリ条件、例1:

<select id="selByPriPro" resultType="flower">
	select * from flower where 1 = 1 
	<if test="price != null and price != ''">
		and price = #{price}
	</if>
	<if test="production != null and production != ''">
		and production = #{production}
	</if>
</select>

次のようにラベルが明らかな利点である場合は、この時点での結果は、大量生産に関与するパラメータを渡すことはありません。
ここに画像を挿入説明
ここに画像を挿入説明

2、そうでない場合は、とき、選択します。

時々、私たちは多くのオプションの中1例のみを選択したい逆に、条件のすべてを望んでいません。そして、switch文のJavaはMyBatisのは、そうでない場合はタグのセットが要件を満たすようにする場合、選択しています、類似しています。例2:

<select id="selByPriPro" resultType="flower">
	select * from flower where  1 = 1
	<choose>
		<when test="production != null and production != ''">
			and production = #{production}
		</when>
		<otherwise>
			and price = #{price}
		</otherwise>
	</choose>
</select>

次の2つの例は以下のとおりです。
ここに画像を挿入説明
ここに画像を挿入説明

3、:

構文エラーを回避するために、「1 = 1」は、実施例1のSQL文では、これは1と1の大きさを比較する理由はありません、また、コンピュータのリソースを消費するには、プログラムのために、コンピュータは、貴重な資源でありますしたがって、この問題を回避する方法はありません、答えはイエス、あなたがどこのラベルを使用することができます。例3:

<select id="selByPriPro" resultType="flower">
	select * from flower
	<where>
		<if test="price != null and price != ''">
			and price = #{price}
		</if>
		<if test="production != null and production != ''">
			and production = #{production}
		</if>
	</where>
</select>

このとき、生産および送信価格の参加結果に次のパラメータを渡すことはありません。
ここに画像を挿入説明
ここに画像を挿入説明

4、トリム:

子タグがトリムタブ内の条件を満たしているし、それが指定されたコンテンツの前に追加されたときに、SQL文の場合の断片を縫い合わせる、または指定されたコンテンツのSQLフラグメントの始まりを削除する場合がありの場合:トリムタブをするために使用されます。図3の実施例は、実施例4、例えば、修飾されてもよいです。

<select id="selByPriPro" resultType="flower">
	select * from flower
	<trim prefix="where" prefixOverrides="and">
		<if test="price != null and price != ''">
			and price = #{price}
		</if>
		<if test="production != null and production != ''">
			and production = #{production}
		</if>
	</trim>
</select>

このとき、生産、価格は物質移動パラメータに関与していないと以下の通りであった:
ここに画像を挿入説明
ここに画像を挿入説明
注:TRIMタグ属性を説明

  • 接頭辞:追加のSQLの最初のフラグメントの先頭に指定されたコンテンツが返さ。
  • prefixOverrides:リターンのSQL断片のためのコンテンツを指定する接頭辞を追加する前に、最初のコンテンツを指定されたSQL開口セグメントを削除します。
  • サフィックス:追加は、指定されたコンテンツSQLは最後のセグメントの終了を返されました。
  • suffixOverrides:リターンのSQL最後のセグメントの内容を指定する接頭辞を追加する前に、最初に指定されたコンテンツのSQL断片の端部を削除します。

5、バインド:

許容可能な「%」をステッチパラメータファジークエリで使用する場合、SQL文のニーズを満たすために受け入れられたパラメータにさらに変更を行うために使用されてバインド単一ラベル。例5:

<select id="selByPriPro" resultType="flower">
	<bind name="pattern" value="'%' + production + '%'"/>
	select * from flower where production like #{pattern}
</select>

次のように生産実績に渡されたパラメータとして「アジア」は、次のとおりです。
ここに画像を挿入説明

6、foreachの:

foreachのタグは、一般的に、クエリで使用されるSQL文の中にスプライシングされたデータを修正するために、横断時の各横断をコレクションの内容を反復するために使用されます。例6:

<select id="selByIn" resultType="flower">
	select * from flower where name in 
	<foreach collection="names" open="(" close=")" separator="," item="name" index="index"> 
		#{name}
	</foreach>
</select>

:次のように「ペチュニア」、「ジニア」、集合的検査結果の「さくら」のリストに含まれています
ここに画像を挿入説明
注意:foreachのタグ属性の説明を

  • コレクション:パラメータのセットを受け取ります。
  • オープン:トラバースは、最初のステッチのコンテンツの開始前に、指定されました。
  • 近く:ステッチの後に指定されたコンテンツの終わりを通過します。
  • セパレータ:各パススプライシングのデリミタ指定されたコンテンツ。
  • 項目:指定された各パスに割り当てられた変数データ。
  • インデックス:回数を記録するには、0から始まる、トラバース。

7、セット:

他のタグから異なるが、タグがタグを提供SETデータを修正するために設計され、タグが動的に含まれていない更新せずに、使用済みのSET列更新含まれていてもよいです。例7:

<update id="upd" parameterType="map">
	update flower 
	<set>
		<trim suffixOverrides=",">
			<if test="name != null">name = #{name}, </if>
			<if test="price != null">price = #{price}, </if>
			<if test="production != null">production = #{production},</if>
		</trim>
	</set>
	where id = #{id}
</update>

試験番号4は、情報を変更する費やし、結果は次の通りであります:
ここに画像を挿入説明

公開された128元の記事 ウォン称賛17 ビュー2736

おすすめ

転載: blog.csdn.net/qq_43705275/article/details/104066258