在数据库操作中,动态 SQL 是一种非常常见且灵活的方式,能够根据不同的条件生成不同的 SQL 语句,从而实现灵活的数据库操作。MyBatis 提供了一系列的动态 SQL 标签,如 <if>、<choose>、<when>、<otherwise> 等,可以方便地实现动态 SQL 的构建。本文将深入介绍 MyBatis 中常用的动态 SQL 标签,并通过示例详细展示如何轻松搞定动态 SQL 的应用。 <if> 标签 <if> 标签用于条件判断,根据条件动态生成 SQL 片段。例如,根据条件查询用户列表: 在上述代码中,如果 username 不为空,则会添加 AND username = #{username} 到 SQL 中;如果 gender 不为空,则会添加 AND gender = #{gender} 到 SQL 中。 <if> 标签可以嵌套使用,实现更复杂的条件判断。例如,根据不同的条件组合查询用户列表: <choose>、<when>、<otherwise> 标签 <choose>、<when>、<otherwise> 标签组合起来用于多条件选择,类似于 Java 中的 switch-case 语句。例如,根据不同条件选择不同的查询条件: 在上述代码中,根据 gender 的值选择不同的查询条件。 <trim>、<set>、<foreach> 标签 <trim> 标签用于去除 SQL 语句中多余的空格和逗号。例如,构建动态的 UPDATE 语句: <set> 标签用于构建 UPDATE 语句中的 SET 子句。 <foreach> 标签用于循环处理集合中的元素,通常用于构建 IN 查询语句。例如,根据多个 ID 查询用户列表: 动态 SQL 的应用场景 动态 SQL 在实际开发中有很多应用场景,常见的包括: 总 结 动态 SQL 是 MyBatis 中非常强大的特性,通过灵活使用动态 SQL 标签,可以方便地构建各种复杂的 SQL 查询语句。本文详细介绍了 MyBatis 中常用的动态 SQL 标签,包括 <if>、<choose>、<when>、<otherwise>、<trim>、<set>、<foreach> 等,并通过示例展示了其基本用法和嵌套使用方法。相信读者通过本文的学习,可以轻松搞定 MyBatis 的动态 SQL 标签,在实际项目中更加灵活地构建 SQL 查询语句,提高开发效率和代码质量。1. 基本用法
<select id="selectUsers" resultType="User">
SELECT * FROM user
<where>
<if test="username != null">
AND username = #{username}
</if>
<if test="gender != null">
AND gender = #{gender}
</if>
</where>
</select>
2. 嵌套使用
<select id="selectUsers" resultType="User">
SELECT * FROM user
<where>
<if test="username != null">
AND username = #{username}
</if>
<if test="age != null">
<if test="age < 18">
AND age < 18
</if>
<if test="age >= 18">
AND age >= 18
</if>
</if>
</where>
</select>
1. 基本用法
<select id="selectUsers" resultType="User">
SELECT * FROM user
<where>
<choose>
<when test="gender == 'male'">
AND gender = 'male'
</when>
<when test="gender == 'female'">
AND gender = 'female'
</when>
<otherwise>
AND 1 = 1
</otherwise>
</choose>
</where>
</select>
1. <trim> 标签
<update id="updateUser" parameterType="User">
UPDATE user
<set>
<trim prefix="SET" suffixOverrides=",">
<if test="username != null">
username = #{username},
</if>
<if test="password != null">
password = #{password},
</if>
<if test="gender != null">
gender = #{gender},
</if>
</trim>
</set>
WHERE id = #{id}
</update>
2. <set> 标签
3. <foreach> 标签
<select id="selectUsersByIds" resultType="User">
SELECT * FROM user
WHERE id IN
<foreach collection="ids" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</select>