一、标签< include>

标签用于将某个SQL片段作为一个整体引入到当前SQL语句中,可以将重复使用的SQL语句片段进行封装,方便管理和维护。在使用标签时,需要注意以下几点:

语法格式

<include refid="SQL片段ID"/>

其中,refid属性指向要引入的SQL片段的ID,例如:

<select id="selectUsers" resultMap="userResultMap">
  SELECT * FROM users
  <include refid="whereClause" />
</select>

<sql id="whereClause">
  <where>
    <if test="name != null">
      AND name = #{name}
    </if>
    <if test="age != null">
      AND age = #{age}
    </if>
  </where>
</sql>

在上述示例中,标签定义了一个SQL片段,其中包含了一个标签和两个标签,用于动态生成查询条件。标签的refid属性引用了该SQL片段,并将其包含在了标签中。

SQL片段的作用域
在Mybatis的XML配置文件中,SQL片段的作用域有两种:

(1)全局作用域:定义在标签外部的SQL片段可以在整个XML文件中使用。

(2)局部作用域:定义在、、或标签内部的SQL片段仅在当前标签的SQL语句中使用。

因此,在定义SQL片段时,需要根据实际情况选择合适的作用域,避免命名冲突或不必要的内存占用。

二、< trim>标签

标签也用于动态生成SQL语句,常用于去除多余的SQL关键字或条件语句。在使用标签时,需要注意以下几点:

语法格式

<trim prefix="前缀" suffix="后缀" prefixOverrides="需要去除的前缀" suffixOverrides="需要去除的后缀">
  SQL语句
</trim>

其中,prefix属性表示在SQL语句前添加的前缀,suffix属性表示在SQL语句后添加的后缀,prefixOverrides属性表示需要去除的前缀,suffixOverrides属性表示需要去除的后缀,假设我们有一个查询用户的SQL语句,其中可能会出现一些多余的AND或OR条件,我们可以使用trim标签来去除这些多余的部分,如下所示:

<select id="getUserList" resultType="User">
  SELECT * FROM user
  <trim prefix="WHERE" prefixOverrides="AND | OR">
    <if test="id != null">
      AND id = #{id}
    </if>
    <if test="name != null">
      AND name = #{name}
    </if>
    <if test="age != null">
      AND age = #{age}
    </if>
  </trim>
</select>

在这个示例中,我们使用了trim标签来去除SQL语句中可能出现的多余的WHERE、AND和OR关键字。如果id、name和age都为空,那么最终生成的SQL语句就是“SELECT * FROM user”,如果只有id不为空,那么最终生成的SQL语句就是“SELECT * FROM user WHERE id = ?”,如果只有name和age不为空,那么最终生成的SQL语句就是“SELECT * FROM user WHERE name = ? AND age = ?”,如果id、name和age都不为空,那么最终生成的SQL语句就是“SELECT * FROM user WHERE id = ? AND name = ? AND age = ?”。