mybatis Xml映射文件中,除了常见的select|insert|updae|delete 标签之外,还有哪些标签?
1 个回答
忙碌足以冲淡很多复杂的情绪李元霸### MyBatis XML 映射文件中的标签 除了常见的 `select`、`insert`、`update` 和 `delete` 标签之外,MyBatis XML 映射文件中还有一些其他重要的标签,尤其是在动态 SQL 和 SQL 片段管理方面。以下是这些标签的详细说明: #### 动态 SQL 标签 1. **`<where>`** - **描述**:用于动态地添加 `WHERE` 子句,如果子句中包含内容则自动添加 `WHERE`,否则不添加。 - **示例**: ```xml <where> <if test="name != null">name = #{name}</if> <if test="age != null">AND age = #{age}</if> </where> ``` 2. **`<if>`** - **描述**:根据条件动态包含 SQL 片段。 - **示例**: ```xml <if test="name != null">name = #{name}</if> ``` 3. **`<choose>`** - **描述**:相当于 Java 中的 `switch` 语句,用于选择性地包含 SQL 片段。 - **示例**: ```xml <choose> <when test="type == 1">AND type = 1</when> <otherwise>AND type = 2</otherwise> </choose> ``` 4. **`<when>`** - **描述**:在 `choose` 语句中使用,相当于 `switch` 的 `case`。 - **示例**: ```xml <when test="type == 1">AND type = 1</when> ``` 5. **`<otherwise>`** - **描述**:在 `choose` 语句中使用,相当于 `switch` 的 `default`。 - **示例**: ```xml <otherwise>AND type = 2</otherwise> ``` 6. **`<trim>`** - **描述**:自定义删除或添加前缀和后缀。 - **示例**: ```xml <trim prefix="WHERE" prefixOverrides="AND |OR "> <if test="name != null">AND name = #{name}</if> <if test="age != null">AND age = #{age}</if> </trim> ``` 7. **`<set>`** - **描述**:用于动态地生成 `SET` 子句。 - **示例**: ```xml <set> <if test="name != null">name = #{name},</if> <if test="age != null">age = #{age},</if> </set> ``` 8. **`<foreach>`** - **描述**:用于遍历集合,生成动态的 SQL 片段。 - **示例**: ```xml <foreach collection="list" item="item" separator=","> #{item} </foreach> ``` 9. **`<bind>`** - **描述**:用于绑定一个变量到上下文中。 - **示例**: ```xml <bind name="pattern" value="'%' + name + '%'"/> ``` #### SQL 片段标签 1. **`<sql>`** - **描述**:用于定义可重用的 SQL 片段。 - **示例**: ```xml <sql id="userColumns">id, name, age</sql> ``` 2. **`<include>`** - **描述**:用于引入定义的 SQL 片段。 - **示例**: ```xml <select id="selectUsers" resultType="User"> SELECT <include refid="userColumns"/> FROM users </select> ``` #### 主键生成策略标签 1. **`<selectKey>`** - **描述**:用于为不支持自增的主键生成策略。 - **示例**: ```xml <insert id="insertUser"> <selectKey keyProperty="id" resultType="int" order="BEFORE"> SELECT NEXTVAL('seq_user_id') </selectKey> INSERT INTO users (id, name, age) VALUES (#{id}, #{name}, #{age}) </insert> ``` ### 总结 MyBatis 提供了丰富的标签用于处理动态 SQL 和 SQL 片段,增强了 SQL 语句的灵活性和可维护性。这些标签包括: - **动态 SQL 标签**:`<where>`、`<if>`、`<choose>`、`<when>`、`<otherwise>`、`<trim>`、`<set>`、`<foreach>`、`<bind>` - **SQL 片段标签**:`<sql>`、`<include>` - **主键生成策略标签**:`<selectKey>` 通过合理使用这些标签,可以使 MyBatis 的 SQL 映射文件更加灵活和高效。发布于 2024-07-26 01:30 •IP属地 江苏举报评论收藏
公众号进入网站体验更佳

