Mybatisで動的sqlを作成する方法

Mybatisで動的sqlを作成する方法

MyBatisで動的SQLを作成する方法

MyBatisでは、動的SQLを作成するためにif, choose, when, otherwise, where, set, foreachなどの要素を使用します。
以下は、test_userテーブルを例にした動的SQLの作成方法です。

基本的な使用例

XMLマッパーファイル (testUserMapper.xml)

<mapper namespace="com.example.mapper.TestUserMapper">

    <!-- 動的SQLの例 -->
    <select id="selectUsers" parameterType="map" resultType="com.example.domain.TestUser">
        SELECT * FROM test_user
        <where>
            <if test="username != null">
                AND username = #{username}
            </if>
            <if test="age != null">
                AND age = #{age}
            </if>
        </where>
    </select>

    <!-- chooseの例 -->
    <select id="selectUserByCondition" parameterType="map" resultType="com.example.domain.TestUser">
        SELECT * FROM test_user
        <where>
            <choose>
                <when test="username != null">
                    AND username = #{username}
                </when>
                <when test="age != null">
                    AND age = #{age}
                </when>
                <otherwise>
                    AND status = 'active'
                </otherwise>
            </choose>
        </where>
    </select>

    <!-- foreachの例 -->
    <select id="selectUsersByIds" parameterType="list" resultType="com.example.domain.TestUser">
        SELECT * FROM test_user
        WHERE id IN
        <foreach item="id" collection="list" open="(" separator="," close=")">
            #{id}
        </foreach>
    </select>

</mapper>
主要な要素の説明
  • if:

条件が満たされる場合にのみSQLを追加します。

  • choose, when, otherwise:

複数の条件をチェックし、最初に満たされた条件に対応するSQLを生成します。

  • foreach:

コレクションの要素を繰り返してSQLを生成します。

これにより、柔軟で動的なSQLを生成できるようになります。