mybatis 的动态sql
·
MyBatis 的动态 SQL 是指在 MyBatis 的映射文件中,根据不同的条件动态生成 SQL 语句。这样可以简化代码,提高可读性和可维护性。以下是八大动态 SQL 的使用场景及示例:
1.if
场景:当某个条件成立时,需要执行一段 SQL 语句。
<select id="findUsers" resultType="User">
SELECT * FROM user
<where>
<if test="username != null and username != ''">
AND username = #{username}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
</select>
2.choose、when、otherwise
场景:类似于 Java 中的 switch-case 语句,根据条件选择不同的 SQL 语句。
<select id="findUsers" resultType="User">
SELECT * FROM user
<where>
<choose>
<when test="username != null and username != ''">
AND username = #{username}
</when>
<when test="age != null">
AND age = #{age}
</when>
<otherwise>
AND email = #{email}
</otherwise>
</choose>
</where>
</select>
3.trim、where、set
场景:用于自动处理 SQL 语句中的多余逗号和 AND/OR 关键字。
<update id="updateUser" parameterType="User">
UPDATE user
<set>
<if test="username != null and username != ''">
username = #{username},
</if>
<if test="age != null">
age = #{age},
</if>
<if test="email != null and email != ''">
email = #{email},
</if>
</set>
<where>
<trim prefix="AND" suffixOverrides=",">
<if test="username != null and username != ''">
username = #{username},
</if>
<if test="age != null">
age = #{age},
</if>
<if test="email != null and email != ''">
email = #{email},
</if>
</trim>
</where>
</update>
4.foreach
场景:用于遍历集合,生成 IN 语句。
<select id="findUsersByIds" resultType="User">
SELECT * FROM user
<where>
<foreach collection="ids" item="id" open="(" close=")" separator=",">
id = #{id}
</foreach>
</where>
</select>
5.bind
场景:用于创建一个变量,可以在后续的 SQL 语句中使用。
<select id="findUsersByName" resultType="User">
SELECT * FROM user
<where>
<bind name="pattern" value="'%' + username + '%'"/>
username LIKE #{pattern}
</where>
</select>
6.when
场景:类似于 Java 中的 switch-case 语句,根据条件选择不同的 SQL 片段。
<update id="updateUser" parameterType="User">
UPDATE user
<set>
<if test="username != null and username != ''">
username = #{username},
</if>
<if test="age != null">
age = #{age},
</if>
<if test="email != null and email != ''">
email = #{email},
</if>
</set>
<when test="username != null and username != ''">
AND username = #{username}
</when>
<when test="age != null">
AND age = #{age}
</when>
<when test="email != null and email != ''">
AND email = #{email}
</when>
</update>
7.choose、when、otherwise、bind
场景:与第 2 点类似,但可以绑定变量。
<select id="findUsersByNameOrAge" resultType="User">
SELECT * FROM user
<where>
<choose>
<when test="name != null and name != ''">
AND name = #{name}
</when>
<when test="age != null">
AND age = #{age}
</when>
<otherwise>
AND email = #{email}
</otherwise>
</choose>
</where>
</select>
8.trim、where、set、choose、when、otherwise、bind
场景:与第 3、4、5、6、7 点类似,但可以自动处理多余的逗号和 AND/OR 关键字。
<update id="updateUser" parameterType="User">
UPDATE user
<set>
<trim prefix="AND" suffixOverrides=",">
<if test="name != null and name != ''">
name = #{name},
</if>
<if test="age != null">
age = #{age},
</if>
<if test="email != null and email != ''">
email = #{email},
</if>
</trim>
</set>
<where>
<choose>
<when test="name != null and name != ''">
AND name = #{name}
</when>
<when test="age != null">
AND age = #{age}
</when>
<when test="email != null and email != ''">
AND email = #{email}
</when>
<otherwise>
AND id = #{id}
</otherwise>
</choose>
</where>
</update>
更多推荐



所有评论(0)