MyBatisで条件分岐を実装する
ifで条件分岐
MyBatisで「if test」を使えば、「もし~だったら」という条件文が書けます。
次の例で、もし「idがnull以外」の場合「AND id = #{id}」の条件をWHERE句に追加するという条件分岐を作成しています。
<select id="search" resultType="com.example.demo.entity.UserInfo">
SELECT
*
FROM
userinfo
WHERE
delete_date IS NULL
<if test="id != null">
AND id = #{id}
</if>
</select>
また「and」や「or」で条件を複数書くこともできます。
次の例では、もし「idがnull以外 かつ 空文字以外」の場合「AND id = #{id}」の条件をWHERE句に追加するという条件分岐を作成しています。
<select id="search" resultType="com.example.demo.entity.UserInfo">
SELECT
*
FROM
userinfo
WHERE
delete_date IS NULL
<if test="id != null and id != ''">
AND id = #{id}
</if>
<if test="name != null and name != ''">
AND name = #{name}
</if>
</select>
スポンサーリンク
chooseで条件分岐
MyBatisで「if-else if-else」のような条件分岐を作成するときは、「choose-when-otherwise」を使用します。
「choose-when-otherwise」の書き方は、次のとおりです。
- <choose>~</choose>で囲む。
- <when>~</when>に条件を書く(whenは複数作成可能)、これが「if」や「else if」と同じ意味。
- <otherwise>~</otherwise>に<when>の条件に一致しなかった時の処理を書く(otherwiseは書かなくてもよい)、これが「else」と同じ意味。
次のSQLは「choose-when-otherwise」の使用例です。
<select id="search" resultType="com.example.demo.entity.UserInfo">
SELECT
*
FROM
userinfo
WHERE
delete_date IS NULL
<choose>
<when test="id != null and id != ''">
AND id = #{id}
</when>
<when test="name != null and name != ''">
AND name = #{name}
</when>
<otherwise>
AND id = '1'
</otherwise>
</choose>
</select>
上記例では、下記1~3のいずれかをWHERE句に追加するという条件分岐を作成しています。
- <when test="id != null and id != ''">の条件に一致 → 「AND id = #{id}」の条件をWHERE句に追加。
- 上記が一致しない場合 → <when test="name != null and name != ''">の条件に一致したら、「AND name = #{name}」の条件をWHERE句に追加。
- 上記のいずれにも一致しない場合 → 「AND id = '1'」の条件をWHERE句に追加。
helpful
この記事は役に立ちましたか?