Mybatis动态sql可以让我们更灵活高效的执行数据库操作。
汇总记录下常用标签用法,下次某个用法忘记了可以快速回忆起来~~~
1.<if>
标签
<if>
标签用于在满足条件时包含其内部的 SQL 片段。
示例代码:
<select id="selectUsers" parameterType="map" resultType="User">
SELECT * FROM users
<where>
<if test="username != null">
AND username = #{username}
</if>
<if test="email != null">
AND email = #{email}
</if>
</where>
</select>
2.<choose>
, <when>
和 <otherwise>
标签
<choose>
标签类似于 Java 中的 switch 语句,<when>
标签用于定义条件分支,<otherwise>
标签用于定义默认情况。
示例代码:
<select id="selectUsers" 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>
3.<trim>
标签
<trim>
标签可以用于处理 SQL 片段中的前缀、后缀和分隔符等问题。
示例代码:
<update id="updateUser" parameterType="User">
UPDATE users
<trim prefix="SET" suffixOverrides=",">
<if test="username != null">
username = #{username},
</if>
<if test="email != null">
email = #{email},
</if>
</trim>
WHERE id = #{id}
</update>
4.<where>
和 <set>
标签
<where>
标签用于动态拼接 WHERE 子句,<set>
标签用于动态拼接 SET 子句(通常用于更新操作)。
示例代码:
<update id="updateUser" parameterType="User">
UPDATE users
<set>
<if test="username != null">
username = #{username},
</if>
<if test="email != null">
email = #{email},
</if>
</set>
WHERE id = #{id}
</update>
5.<foreach>
标签
<foreach>
标签用于循环遍历集合,并将集合中的元素作为参数动态生成 SQL 语句的一部分。
示例代码:
<select id="selectUsersByIdList" parameterType="map" resultType="User">
SELECT * FROM users
WHERE id IN
<foreach collection="idList" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</select>
collection
属性指定要遍历的集合。item
属性指定在遍历过程中每个元素的别名。index
属性指定在遍历过程中每个元素的索引。open
属性指定在整个循环开始时要添加的内容。close
属性指定在整个循环结束时要添加的内容。separator
属性指定在每两个元素之间要添加的分隔符。