MyBatis 动态标签:灵活构建 SQL 语句
MyBatis 中的动态标签可以根据不同的条件生成不同的 SQL 语句,包括以下几种:
- 'if' 标签:用于判断某个条件是否成立,如果成立则生成相应的 SQL 语句,否则不生成。示例:
<select id="getUser" parameterType="java.util.Map" resultType="User">
SELECT * FROM user
WHERE 1=1
<if test="id != null">
AND id = #{id}
</if>
<if test="name != null">
AND name = #{name}
</if>
</select>
- 'choose' 标签:类似于 Java 中的 switch 语句,根据不同的条件生成不同的 SQL 语句,每个条件都对应一个 'when' 标签,如果所有条件都不成立,则生成 'otherwise' 标签中的 SQL 语句。示例:
<select id="getUser" parameterType="java.util.Map" resultType="User">
SELECT * FROM user
WHERE 1=1
<choose>
<when test="id != null">
AND id = #{id}
</when>
<when test="name != null">
AND name = #{name}
</when>
<otherwise>
AND age = #{age}
</otherwise>
</choose>
</select>
- 'where' 标签:用于将多个条件用 AND 连接在一起,如果所有条件都不存在,则 'where' 标签不生成。示例:
<select id="getUser" parameterType="java.util.Map" resultType="User">
SELECT * FROM user
<where>
<if test="id != null">
AND id = #{id}
</if>
<if test="name != null">
AND name = #{name}
</if>
</where>
</select>
- '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>
- 'foreach' 标签:用于循环操作,可以将一个列表中的元素循环遍历,生成多条 SQL 语句。示例:
<select id="getUsersByIds" parameterType="java.util.List" resultType="User">
SELECT * FROM user
WHERE id IN
<foreach collection="list" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</select>
原文地址: https://www.cveoy.top/t/topic/oKLl 著作权归作者所有。请勿转载和采集!