Mybatisで条件分岐を実装する方法
MyBatisでの条件分岐の実装
MyBatisでは、動的SQLを使って条件分岐を実装できます。
以下に、test_userというテーブルとtestUserMapperというマッパークラスを例にして、条件分岐の使い方を紹介します。
1. ifを使った条件分岐
ifを使用して、SQLに条件を追加できます。
例えば、ユーザーが有効な場合のみデータを取得するSQLは以下のように書けます。
<mapper namespace="com.example.testUserMapper"> <select id="selectActiveUsers" resultType="TestUser"> SELECT * FROM test_user WHERE 1=1 <if test="status != null"> AND status = #{status} </if> </select> </mapper>
この場合、statusがnullでない場合のみ、AND status = *{status}という条件がSQLに追加されます。
2. chooseを使った条件分岐
chooseは、whenとotherwiseを使って複数の条件の中から最初に満たされたものを選択します。
<mapper namespace="com.example.testUserMapper"> <select id="selectUsersByCondition" resultType="TestUser"> SELECT * FROM test_user WHERE 1=1 <choose> <when test="status != null"> AND status = #{status} </when> <when test="age != null"> AND age = #{age} </when> <otherwise> AND created_at >= NOW() </otherwise> </choose> </select> </mapper>
ここでは、statusがnullでなければその条件が使われ、次にageがnullでなければその条件が使われます。
どちらの条件も満たされない場合は、otherwiseの条件が使われます。
3. whereを使った条件分岐
whereを使うと、動的なWHERE句を生成し、適切にANDやORを自動で追加してくれます。
<mapper namespace="com.example.testUserMapper"> <select id="selectUsersDynamicWhere" resultType="TestUser"> SELECT * FROM test_user <where> <if test="status != null"> AND status = #{status} </if> <if test="age != null"> AND age = #{age} </if> </where> </select> </mapper>
この例では、statusやageが指定されている場合にのみ、対応する条件がSQLに含まれます。
まとめ
MyBatisの条件分岐を使うことで、柔軟で効率的なSQLクエリを実行できます。
ifやchoose、whereを適切に使い分けることで、様々な条件に対応するSQLを構築できます。