欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > Xml 映射文件中常见的标签

Xml 映射文件中常见的标签

2024/10/26 15:18:20 来源:https://blog.csdn.net/Flying_Fish_roe/article/details/141760316  浏览:    关键词:Xml 映射文件中常见的标签

 一、动态 SQL 标签

MyBatis 提供了一系列标签来处理动态 SQL,它们能够根据传入的参数生成不同的 SQL 语句。这些标签包括:

1. **`<if>` 标签**

`<if>` 标签用于根据条件判断是否包含某段 SQL 语句。可以使用它来实现动态拼接 SQL。

```xml
<select id="findUsers" resultType="User">SELECT * FROM users WHERE 1=1<if test="name != null">AND name = #{name}</if><if test="age != null">AND age = #{age}</if>
</select>
```

在上面的例子中,只有当 `name` 或 `age` 参数不为空时,相关的 SQL 片段才会被拼接到最终的查询语句中。

2. **`<choose>`、`<when>` 和 `<otherwise>` 标签**

这些标签用于实现类似于 `switch-case` 的逻辑选择。


<select id="findUsersByCondition" resultType="User">SELECT * FROM users WHERE 1=1<choose><when test="name != null">AND name = #{name}</when><when test="age != null">AND age = #{age}</when><otherwise>AND status = 'active'</otherwise></choose>
</select>

在上面的例子中,MyBatis 会选择第一个满足条件的 `<when>` 块。如果没有任何 `<when>` 条件满足,则会执行 `<otherwise>` 块。

3. **`<trim>` 标签**

`<trim>` 标签用于在动态 SQL 中添加或删除特定的前缀或后缀。


<update id="updateUser">UPDATE users<set><trim suffixOverrides=","><if test="name != null">name = #{name},</if><if test="age != null">age = #{age},</if></trim></set>WHERE id = #{id}
</update>

`<trim>` 标签在这里用于去除最后多余的逗号。

 4. **`<set>` 标签**

`<set>` 标签用于动态地生成 `SET` 子句,在构造 `UPDATE` 语句时特别有用。


<update id="updateUser">UPDATE users<set><if test="name != null">name = #{name},</if><if test="age != null">age = #{age},</if></set>WHERE id = #{id}
</update>

`<set>` 标签会自动去除 `SET` 语句中最后多余的逗号。

 5. **`<where>` 标签**

`<where>` 标签用于处理 `WHERE` 子句的动态生成。如果内部的条件没有生成任何内容,则 `WHERE` 子句不会被包含。此外,它还会自动处理 AND/OR 的前置情况。


<select id="findUsers" resultType="User">SELECT * FROM users<where><if test="name != null">AND name = #{name}</if><if test="age != null">AND age = #{age}</if></where>
</select>

如果没有条件满足,则不会生成 `WHERE` 子句;如果有多个条件满足,`<where>` 会自动添加 `AND` 关键字。

6. **`<foreach>` 标签**

`<foreach>` 标签用于遍历集合,生成一系列的 SQL 片段,通常用于处理 `IN` 子句或批量插入操作。


<select id="findUsersByIds" resultType="User">SELECT * FROM users WHERE id IN<foreach item="id" collection="idList" open="(" separator="," close=")">#{id}</foreach>
</select>

`<foreach>` 标签会遍历 `idList` 集合,将每个 `id` 插入到 SQL 中。

 二、参数映射与结果映射标签

MyBatis 提供了一些标签用于自定义 SQL 参数的传递和结果的映射处理。

 1. **`<resultMap>` 标签**

`<resultMap>` 标签是 MyBatis 中非常强大且常用的标签,用于定制查询结果集到 Java 对象的映射。它允许你更精细地控制结果集的映射,包括嵌套映射、复杂对象结构等。


<resultMap id="userResultMap" type="User"><id property="id" column="id"/><result property="name" column="name"/><result property="age" column="age"/>
</resultMap><select id="findUserById" resultMap="userResultMap">SELECT * FROM users WHERE id = #{id}
</select>

在这个例子中,`<resultMap>` 定义了如何将 SQL 查询的结果映射到 `User` 对象中。

2. **`<parameterMap>` 标签**(已过时)

`<parameterMap>` 是 MyBatis 的早期版本中用于参数映射的标签,但它已经过时并且在现代 MyBatis 开发中很少使用。通常建议使用参数类型直接在 SQL 标签中定义,例如 `parameterType="java.lang.Integer"`。

3. **`<association>` 和 `<collection>` 标签**

这些标签用于在 `resultMap` 中定义复杂的映射关系,如一对一和一对多关系。

- **`<association>`**:用于映射一对一关系。
  
- **`<collection>`**:用于映射一对多关系。


<resultMap id="userResultMap" type="User"><id property="id" column="id"/><result property="name" column="name"/><result property="age" column="age"/><association property="address" javaType="Address"><id property="id" column="address_id"/><result property="street" column="street"/></association>
</resultMap>

在这个例子中,`<association>` 用于将 `address` 映射到 `User` 对象的一个嵌套属性上。

三、SQL 片段重用标签

为了减少重复的 SQL 代码,MyBatis 提供了一些标签,用于定义和重用 SQL 片段。

 1. **`<sql>` 标签**

`<sql>` 标签用于定义可以在多个地方重用的 SQL 片段。你可以在一个 `<sql>` 中定义公共的 SQL 语句,然后在其他地方引用它。


<sql id="userColumns">id, name, age, address
</sql><select id="findAllUsers" resultType="User">SELECT<include refid="userColumns"/>FROM users
</select>

2. **`<include>` 标签**

`<include>` 标签用于在 SQL 语句中引用由 `<sql>` 标签定义的 SQL 片段。


<select id="findUserById" resultType="User">SELECT<include refid="userColumns"/>FROM users WHERE id = #{id}
</select>

四、其他常用标签

1. **`<bind>` 标签**

`<bind>` 标签用于创建一个新的绑定变量,可以在 SQL 语句中引用。这个功能在需要处理复杂的表达式或避免重复计算时非常有用。


<select id="findUsersByNameLike" resultType="User"><bind name="pattern" value="'%' + name + '%'" />SELECT * FROM users WHERE name LIKE #{pattern}
</select>

在这个例子中,`<bind>` 标签用于创建一个新的绑定变量 `pattern`,并在后续的 SQL 语句中使用它。

 2. **`<cache>` 和 `<cache-ref>` 标签**

MyBatis 支持二级缓存,`<cache>` 标签用于在映射文件中配置缓存。


<cache eviction="LRU" flushInterval="60000" size="512" readOnly="true"/>

`<cache-ref>` 标签用于引用另一个命名空间中的缓存配置,允许多个映射文件共享同一个缓存配置。


<cache-ref namespace="com.example.mapper.UserMapper"/>

五、总结       

常见的XML映射文件标签如下:

  1. &lt;mapper>:定义一个映射文件。
  2. &lt;resultMap>:定义一个结果映射。
  3. &lt;result>:定义一个查询结果的映射关系。
  4. &lt;select>:定义一个查询语句。
  5. &lt;insert>:定义一个插入语句。
  6. &lt;update>:定义一个更新语句。
  7. &lt;delete>:定义一个删除语句。
  8. &lt;include>:引入其他的映射文件或者语句片段。
  9. &lt;association>:定义一个关联对象的映射关系。
  10. &lt;collection>:定义一个集合对象的映射关系。
  11. &lt;if>:条件判断标签。
  12. &lt;choose>:选择标签,根据条件选择执行其中的一个分支。
  13. &lt;when>&lt;choose>标签中的分支条件判断。
  14. &lt;otherwise>&lt;choose>标签中的默认分支。
  15. &lt;trim>:动态拼接SQL语句时去除多余的逗号或者其他标点符号。
  16. &lt;set>:动态拼接更新语句时使用。
  17. &lt;foreach>:用于循环遍历集合,并将集合中的元素拼接到SQL语句中。
  18. &lt;bind>:用于在SQL语句中绑定一个变量。
  19. &lt;sql>:定义一个可复用的语句片段。
  20. &lt;include>:引用其他的语句片段。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com