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
この記事は役に立ちましたか?