MyBatis CRUD 常用动态 SQL 标签整理
本文整理了 MyBatis 中进行 CRUD 操作时常用的动态 SQL 标签及其使用方式,适合初学者查阅和实践。
1. <if>
:条件判断
用于在满足条件时拼接 SQL 片段。
<select id="selectUser" parameterType="map" resultType="User">SELECT * FROM user<where><if test="name != null and name != ''">name = #{name}</if><if test="age != null">AND age = #{age}</if></where>
</select>
test
是唯一属性,使用 OGNL 表达式判断变量是否存在或满足条件。
2. <choose> / <when> / <otherwise>
:类似 switch-case
用于多分支选择。
<select id="getUser" parameterType="map" resultType="User">SELECT * FROM user<where><choose><when test="id != null">id = #{id}</when><when test="name != null">name = #{name}</when><otherwise>1 = 1</otherwise></choose></where>
</select>
3. <where>
:自动处理 WHERE
和 AND
自动去掉首个 AND
或 OR
,并在需要时自动加上 WHERE
。
<where><if test="name != null">name = #{name}</if><if test="age != null">AND age = #{age}</if>
</where>
4. <set>
:用于 UPDATE
自动拼接字段
会自动去除最后一个逗号,并加上 SET
。
<update id="updateUser" parameterType="User">UPDATE user<set><if test="name != null">name = #{name},</if><if test="age != null">age = #{age},</if></set>WHERE id = #{id}
</update>
5. <foreach>
:用于批量操作(插入、删除、IN)
批量插入:
<insert id="batchInsert" parameterType="list">INSERT INTO user (name, age) VALUES<foreach collection="list" item="user" separator=",">(#{user.name}, #{user.age})</foreach>
</insert>
IN
查询:
<select id="selectByIds" parameterType="list" resultType="User">SELECT * FROM user WHERE id IN<foreach collection="list" item="id" open="(" separator="," close=")">#{id}</foreach>
</select>
6. <trim>
:自定义修剪逻辑(替代 <set>
/ <where>
)
用于去除开头或结尾的多余 SQL 关键词。
<update id="updateUser" parameterType="User">UPDATE user<trim prefix="SET" suffixOverrides=","><if test="name != null">name = #{name},</if><if test="age != null">age = #{age},</if></trim>WHERE id = #{id}
</update>