MyBatisの動的SQLをどのように使用するか?
MyBatisのダイナミックSQLは、条件判断によってSQL文を動的に生成する方法であり、異なる条件に基づいて異なるSQL文を生成し、ダイナミックなクエリを実現することができます。以下に、MyBatisのダイナミックSQLを使用する際の一般的な方法をいくつか紹介します。
- SQL文に条件分岐を追加することで、条件が満たされた場合にのみ、対応するSQL文が実行されます。以下に例を示します:
<select id="getUserList" parameterType="map" resultType="User">
SELECT * FROM user
<where>
<if test="name != null">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
</select>
- 和のラベルを使って、switch-case文と同様の機能を実現できます。以下に例を示します:
<select id="getUserList" parameterType="map" resultType="User">
SELECT * FROM user
<where>
<choose>
<when test="name != null">
AND name = #{name}
</when>
<when test="age != null">
AND age = #{age}
</when>
<otherwise>
AND gender = #{gender}
</otherwise>
</choose>
</where>
</select>
- SQL文中の不要な部分を除外するために、タグを使用します。以下に示すのはサンプルコードです:
<select id="getUserList" parameterType="map" resultType="User">
SELECT * FROM user
<where>
<trim prefix="AND" prefixOverrides="AND">
<if test="name != null">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</trim>
</where>
</select>
- ループ操作を実現するためには、通常はタグを使用し、IN句の条件を組み立てるために使用されます。以下は、サンプルコードです:
<select id="getUserList" parameterType="map" resultType="User">
SELECT * FROM user
WHERE id IN
<foreach collection="ids" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</select>
上記の方法を使用すると、条件に応じて異なるSQL文を柔軟に生成し、動的なクエリ機能を実現することができます。MyBatisの動的SQLの使用方法や例については、MyBatis公式ドキュメントを参照してください。