MyBatis 中的动态 SQL 允许根据条件来动态构建 SQL 查询语句,从而实现更灵活的 SQL 操作。动态 SQL 主要包括以下几个方面:

1. <if> 元素:

<select id="getUser" parameterType="map" resultType="User">
    SELECT * FROM users
    <where>
        <if test="name != null">
            AND name = #{name}
        </if>
        <if test="age != null">
            AND age = #{age}
        </if>
    </where>
</select>

<if> 元素用于条件判断,根据条件动态拼接 SQL 语句。

2. <choose>, <when>, <otherwise> 元素:

<select id="getUser" parameterType="map" resultType="User">
    SELECT * FROM users
    <where>
        <choose>
            <when test="condition == 'A'">
                AND column = 'A'
            </when>
            <when test="condition == 'B'">
                AND column = 'B'
            </when>
            <otherwise>
                AND column = 'C'
            </otherwise>
        </choose>
    </where>
</select>

<choose> 元素类似于 Java 中的 switch,根据条件选择执行其中的一个分支。

3. <foreach> 元素:

<select id="getUsersByIds" parameterType="map" resultType="User">
    SELECT * FROM users WHERE id IN
    <foreach collection="ids" item="id" open="(" separator="," close=")">
        #{id}
    </foreach>
</select>

<foreach> 元素用于遍历集合,动态生成 SQL 的 IN 子句。

4. <trim>, <set>, <where> 元素:

<update id="updateUser" parameterType="User">
    UPDATE users
    <set>
        <if test="name != null">
            name = #{name},
        </if>
        <if test="age != null">
            age = #{age},
        </if>
    </set>
    WHERE id = #{id}
</update>

这些元素用于控制 SQL 语句中空白字符的去除,避免不必要的逗号或 AND 连接。

动态 SQL 可以根据不同条件生成不同的 SQL 语句,使得 SQL 查询更加灵活,能够根据实际需求动态构建查询条件。

Was this helpful?

1 / 0

发表回复 0

Your email address will not be published.