MyBatis 是一款优秀的 ORM 框架,支持将 SQL 语句映射到 XML 文件中,而 XML 文件中的 SQL 语句又包含了很多属性进行配置。其中之一就是 <trim>
标签。
<trim>
标签
<trim>
标签用于在 SQL 语句中动态添加或删除一些字符串。它可以设置以下属性:
prefix
:在<trim>
标签元素起始位置前面添加字符串;suffix
:在<trim>
标签元素结束位置后面添加字符串;prefixOverrides
:删除<trim>
标签内第一次出现的指定字符串;suffixOverrides
:删除<trim>
标签内最后一次出现的指定字符串。
示例一
假设我们需要根据用户提供的查询条件,动态生成 SQL 查询语句。比如,当用户只提供了姓名时,我们只需要查询姓名匹配记录;当用户只提供了手机号时,则只查询手机号匹配记录;当用户姓名和手机号都提供时,则需要同时匹配姓名和手机号。
这时就可以使用 <trim>
标签,如果用户只提供了姓名,则生成的 SQL 语句为:
<select id="queryUser" resultType="User">
SELECT * FROM user WHERE
<trim suffixOverrides="AND">
<if test="name != null and name != ''">
name = #{name}
AND
</if>
</trim>
</select>
<trim>
标签的 suffixOverrides
属性会删除最后一个 AND
,因为在这种情况下,不需要有 AND
连接符。
如果用户只提供了手机号,则生成的 SQL 语句为:
<select id="queryUser" resultType="User">
SELECT * FROM user WHERE
<trim suffixOverrides="AND">
<if test="phoneNumber != null and phoneNumber != ''">
phoneNumber = #{phoneNumber}
AND
</if>
</trim>
</select>
<trim>
标签删除了最后一个 AND
,因为在这种情况下,也不需要有 AND
连接符。
如果用户姓名和手机号都提供,则生成的 SQL 语句为:
<select id="queryUser" resultType="User">
SELECT * FROM user WHERE
<trim prefix="(" suffix=")" prefixOverrides="AND" suffixOverrides="AND">
<if test="name != null and name != ''">
name = #{name}
AND
</if>
<if test="phoneNumber != null and phoneNumber != ''">
phoneNumber = #{phoneNumber}
AND
</if>
</trim>
</select>
在这种情况下,<trim>
标签的 prefix
和 suffix
属性可以在 SQL 语句最前和最后添加括号,以确保正确的运算优先级;同时,<trim>
标签的 prefixOverrides
和 suffixOverrides
属性会删除第一个和最后一个 AND
,以确保 SQL 语句的正确性。
以上示例演示了如何使用 <trim>
标签实现 SQL 语句的动态生成。
示例二
另一个使用 <trim>
标签的场景是在 SQL 语句中添加 WHERE 子句。在动态 SQL 中,一些语句可能会有多种情况,其中一部分情况不需要 WHERE 子句。此时,我们可以使用 <where>
标签来处理,下面是一个例子:
<select id="queryStudent" resultMap="studentResultMap">
SELECT
id, name, age, sex, birthday, address
FROM
student
<where>
<if test="name != null and name != ''">
AND name like '%' || #{name} || '%'
</if>
<if test="age != null">
AND age = #{age}
</if>
<if test="sex != null">
AND sex = #{sex}
</if>
</where>
</select>
<where>
标签内部包含多个 <if>
标签,这些 <if>
标签用于判断某些条件是否符合要求,只有符合要求的条件才会被加进 WHERE 子句中。如果所有条件都不符合要求,则返回不带 WHERE 的 SQL 语句,因为使用 <where>
标签时,它自己会处理添加 WHERE 子句的问题。在这种情况下,<where>
标签会自动忽略前面没有条件的 AND
关键字,保证 SQL 语句的正确性和规范性。
以上是 <trim>
标签应用的两个场景,它的更多应用可以根据项目需求自行思考和使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:mybatis中xml之trim属性说明 - Python技术站