MyBatis 动态 SQL 标签指南
MyBatis 提供了一组动态 SQL 处理功能,允许在运行时构建 SQL 语句。这非常有用,因为你可以根据不同的条件组合查询。下面是常用的动态 SQL 标签及其使用方法。
<if>
标签
- 作用:根据表达式的结果决定是否包含某个 SQL 片段。
- 属性:
test
属性用于设置判断条件。
示例
<select id="findActiveUsers" parameterType="int" resultType="User">
SELECT * FROM user
WHERE status = 'active'
<if test="age != null">
AND age >= #{age}
</if>
</select>
<choose>, <when>, <otherwise> 标签
标签
- 作用:类似于 Java 中的 switch-case 语句,可以有多个 子元素和一个可选的 子元素。
- 属性: 的 test 属性用于设置判断条件。
示例
<select id="findUserByCriteria" parameterType="map" resultType="User">
SELECT * FROM user
WHERE
<choose>
<when test="username != null">
username = #{username}
</when>
<when test="email != null">
email = #{email}
</when>
<otherwise>
active = 1
</otherwise>
</choose>
</select>
<set> 标签
- 作用:用于 UPDATE 语句中,自动处理 SET 子句中的逗号分隔符和前导逗号。
- 属性:无需设置属性。
示例
<update id="updateUser" parameterType="User">
UPDATE user
<set>
<if test="username != null">
username = #{username},
</if>
<if test="email != null">
email = #{email},
</if>
<if test="status != null">
status = #{status}
</if>
</set>
WHERE id = #{id}
</update>
<foreach> 标签
- 作用:遍历集合或数组,生成 SQL 语句中的 IN 子句或列表等。
- 属性:collection 表示要遍历的集合名称;item 表示每次循环的变量名;open 和 close 分别表示循环开始和结束的字符串;separator 表示循环体之间的分隔符。
示例
<select id="findUsersByIds" parameterType="list" resultType="User">
SELECT * FROM user
WHERE id IN
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
</select>
<bind> 标签
- 作用:允许你在 SQL 语句之外绑定变量,常用于预编译 SQL 语句。
- 属性:name 用于定义绑定变量的名称;value 用于设置绑定变量的值。
示例
<select id="findUserByName" parameterType="string" resultType="User">
<bind name="likeStr" value="'%' + username + '%'"/>
SELECT * FROM user WHERE username LIKE #{likeStr}
</select>
<trim> 标签
- 作用:用于修剪 SQL 语句中的前缀或后缀,并能去除多余的逗号等。
- 属性:prefix、suffix、prefixOverrides、suffixOverrides。
示例
<update id="updateUser" parameterType="User">
UPDATE user
<trim prefix="SET" suffixOverrides=",">
<if test="username != null">
username = #{username},
</if>
<if test="email != null">
email = #{email},
</if>
<if test="status != null">
status = #{status}
</if>
</trim>
WHERE id = #{id}
</update>
标签:username,示例,标签,SQL,Mybatis,动态,WHERE,email
From: https://blog.csdn.net/weixin_44990907/article/details/140690699