mybatisダイナミックSQL、各ラベル使用まとめ
27974 ワード
mybatisダイナミックSQLタグ:if where chose others wise trim set foreach
1.ifタグ:
条件判定ラベルは、パラメータの値を判断して、あるクエリー条件を使うかどうかを決定します.基本的な使い方は以下の通りです.
2.whereタグ sqlにはwhere は書かれていません. whereタグは、条件文の最初のandまたはor をフィルタすることができます.
ある時、私達はすべての条件を適用したくなくて、ただ複数のオプションの中から一つを選びたいです.ifタグは条件が本当ならsql綴りを実行します.この時にchoseラベルを使う必要があります.choseとjavaのswitch機能は似ています.
まとめ:chose others wise javaのswitchに似ている…in case…default
4.trimタグ:
trimタグはsql文のプレフィックスとサフィックスを制御するために使用されます.その具体的な属性は以下の通りです.
属性
説明
prefix
sql文スティッチングのプレフィックスを指定します.
subfix
sql文綴りのサフィックスを指定します.
prefixOverrides
sql文の前で削除するキーワードや文字を指定します.ANDカンマ括弧などです.
スffixOverrides
sql文の後に削除するキーワードまたは文字を指定します.
使用方法の例:
trimタグを使って余分なandまたはorを取り除きます.
ダイナミックudate文でset要素を使って列を動的に更新できます.
udate文でifタグを使うと、前のif条件がfalseの場合、余分なカンマのエラーが発生します.この時setでこの問題を解決できます.
動的sqlの1つの一般的な操作は、集合を巡回する必要があります.通常はIN条件文にあります.
属性
説明
コレクション
反復セットの名前を表します.基本的にはリスト、set、array、mapであり、このパラメータは必須パラメータです.
アイテム
今回の反復で得られた要素は、例えば、collectionがlist、set、arrayであればitemがその中の要素であり、mapであれば、itemはkey-valueのalueであり、必ずパラメータを記入します.
open
この文は何で始まりますか?一番よく見られるのは左括弧()、オプションのパラメータです.
close
この文は何で終わりますか?一番よく見られるのは右括弧「)」で、オプションのパラメータです.
separator
セパレータ、mybatisは反復後にitemにセパレータを追加します.一般的にコンマ、オプションのパラメータです.
index
list set配列において、indexは現在の反復要素の下付きを表し、mapにおいてindexはkey-valueにおけるkeyを表し、オプションのパラメータ
一組のmapの例では、
1.ifタグ:
条件判定ラベルは、パラメータの値を判断して、あるクエリー条件を使うかどうかを決定します.基本的な使い方は以下の通りです.
<select id="testWhere" resultMap="BaseResultMap" parameterType="map">
select *from employee where 1=1
-- age 22
<if test='age =="22"'>
and age = #{age}
</if>
--name null
<if test="name != null and name != ''">
and name like %${name}%
</if>
</select>
ここでwhereの後の1=1は、両方の条件がtrueでない場合、sql文が合法的ではなくエラーになる問題を解決するために、下のwhereタグで解決できます.2.whereタグ
<select id="testWhere" resultMap="BaseResultMap" parameterType="map">
select *from employee
<where> -- ,where where
<if test="age != null and age != ''">
age = #{age}
if>
<if test="name != null and name != ''">
-- age false,where and,
and name like %${name}%
if>
where>
select>
3.chose、otherswizeラベルある時、私達はすべての条件を適用したくなくて、ただ複数のオプションの中から一つを選びたいです.ifタグは条件が本当ならsql綴りを実行します.この時にchoseラベルを使う必要があります.choseとjavaのswitch機能は似ています.
<select id="chooseTest" parameterType="map" resultType="map">
select * from employee
<where>
<choose>
<when test="name != null">
and name = #{name}
when>
<when test="age != null">
and age = #{age}
when>
<otherwise>
and address = #{address}
otherwise>
choose>
where>
select>
mybatisは順番に各choseの中の条件を判断します.whenのある条件が満たされた時、choseから飛び出します.つまり最初の条件を満たすwhenだけを選んで、choseの中の条件が全部満たされないなら、otherswiseの文を実行します.まとめ:chose others wise javaのswitchに似ている…in case…default
4.trimタグ:
trimタグはsql文のプレフィックスとサフィックスを制御するために使用されます.その具体的な属性は以下の通りです.
属性
説明
prefix
sql文スティッチングのプレフィックスを指定します.
subfix
sql文綴りのサフィックスを指定します.
prefixOverrides
sql文の前で削除するキーワードや文字を指定します.ANDカンマ括弧などです.
スffixOverrides
sql文の後に削除するキーワードまたは文字を指定します.
使用方法の例:
trimタグを使って余分なandまたはorを取り除きます.
<select id="testWhere" resultMap="BaseResultMap" parameterType="map">
-- trim sql where, and or
select *from employee
<trim prefix="WHERE" prefixOverrides="AND | OR">
<if test="age != null">
age = #{age}
if>
<if test="name != null">
AND name like #{name}
if>
<if test="address != null ">
or address like #{address}
if>
trim>
select>
trimを使って余分なコンマを取り除く: -- mybatis-generator sql,
<insert id="insertSelective" parameterType="com.wg.demo.po.Department">
insert into department
-- (, ),
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
if>
<if test="deptName != null">
dept_name,
if>
<if test="descr != null">
descr,
if>
<if test="createTime != null">
create_time, --
if>
trim>
-- (, ),
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=BIGINT},
if>
<if test="deptName != null">
#{deptName,jdbcType=VARCHAR},
if>
<if test="descr != null">
#{descr,jdbcType=VARCHAR},
if>
<if test="createTime != null">
#{createTime,jdbcType=TIMESTAMP}, --
if>
trim>
insert>
5.セットラベルダイナミックudate文でset要素を使って列を動的に更新できます.
udate文でifタグを使うと、前のif条件がfalseの場合、余分なカンマのエラーが発生します.この時setでこの問題を解決できます.
-- mybatis-generator sql
<update id="updateByPrimaryKeySelective" parameterType="com.wg.demo.po.Employee">
update employee
<set>
<if test="name != null">
name = #{name,jdbcType=VARCHAR},
if>
<if test="age != null">
age = #{age,jdbcType=VARCHAR},
if>
<if test="gender != null">
gender = #{gender,jdbcType=SMALLINT},
if>
<if test="deptId != null">
dept_id = #{deptId,jdbcType=BIGINT},
if>
<if test="address != null">
address = #{address,jdbcType=VARCHAR},
if>
<if test="createTime != null">
create_time = #{createTime,jdbcType=TIMESTAMP}, --
if>
set>
where id = #{id,jdbcType=BIGINT}
update>
6.foreachタグ動的sqlの1つの一般的な操作は、集合を巡回する必要があります.通常はIN条件文にあります.
<select id="selectPostIn" resultType="domain.blog.Post">
SELECT * FROM employee
WHERE id in
<foreach item="item" index="index" collection="list"
open="(" separator="," close=")">
#{item}
foreach>
select>
--list {1,2,3,4}
--sql : select * from employee where id in (1,2,3,4)
foreachタグの属性は以下の通りです.属性
説明
コレクション
反復セットの名前を表します.基本的にはリスト、set、array、mapであり、このパラメータは必須パラメータです.
アイテム
今回の反復で得られた要素は、例えば、collectionがlist、set、arrayであればitemがその中の要素であり、mapであれば、itemはkey-valueのalueであり、必ずパラメータを記入します.
open
この文は何で始まりますか?一番よく見られるのは左括弧()、オプションのパラメータです.
close
この文は何で終わりますか?一番よく見られるのは右括弧「)」で、オプションのパラメータです.
separator
セパレータ、mybatisは反復後にitemにセパレータを追加します.一般的にコンマ、オプションのパラメータです.
index
list set配列において、indexは現在の反復要素の下付きを表し、mapにおいてindexはkey-valueにおけるkeyを表し、オプションのパラメータ
一組のmapの例では、
--