Mybatis的Mapper映射文件中常用的标签及其作用

157 阅读2分钟

1. <select>

  • 作用:定义查询操作,执行 SELECT 语句。

  • 示例:

    <select id="findUserById" parameterType="int" resultType="User">
        SELECT * FROM users WHERE id = #{id}
    </select>
    
  • 属性

    • id:定义方法的唯一标识符,用于接口中调用。
    • parameterType:指定传入参数的类型。
    • resultType:指定返回结果的 Java 类型。

2. <insert>

  • 作用:定义插入操作,执行 INSERT 语句。

  • 示例:

    <insert id="insertUser" parameterType="User">
        INSERT INTO users (name, age) VALUES (#{name}, #{age})
    </insert>
    
  • 属性

    • id:定义方法的唯一标识符。
    • parameterType:传入参数的类型。

3. <update>

  • 作用:定义更新操作,执行 UPDATE 语句。

  • 示例:

    <update id="updateUser" parameterType="User">
        UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}
    </update>
    
  • 属性

    • id:定义方法的唯一标识符。
    • parameterType:传入参数的类型。

4. <delete>

  • 作用:定义删除操作,执行 DELETE 语句。

  • 示例:

    <delete id="deleteUser" parameterType="int">
        DELETE FROM users WHERE id = #{id}
    </delete>
    
  • 属性

    • id:定义方法的唯一标识符。
    • parameterType:传入参数的类型。

5. <resultMap>

  • 作用:定义结果映射,将查询结果与 Java 对象进行映射,尤其是在复杂查询(多表联查)中使用。

  • 示例:

    <resultMap id="userResultMap" type="User">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="age" column="age"/>
    </resultMap>
    
  • 属性

    • id:定义映射的唯一标识符。
    • type:指定映射到的 Java 对象类型。

6. <parameterMap> (已过时)

  • 作用:用于传递复杂的输入参数。通常不再使用,推荐直接使用 parameterType

7. <sql>

  • 作用:用于定义可复用的 SQL 片段,避免重复编写 SQL。

  • 示例:

    <sql id="userColumns">
        id, name, age
    </sql>
    

8. <include>

  • 作用:引入 <sql> 定义的片段。

  • 示例:

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

    • refid:引用 <sql>id

9. <if>

  • 作用:用于动态生成 SQL,根据条件判断是否执行某一 SQL 片段。

  • 示例:

    <select id="findUserByCondition" parameterType="User" 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>
    
  • 属性

    • test:表达式条件。

10. <choose>, <when>, <otherwise>

  • 作用:实现类似于 switch 的功能,根据条件选择执行的 SQL 片段。

  • 示例:

    <select id="findUserByCondition" parameterType="User" resultType="User">
        SELECT * FROM users
        <where>
            <choose>
                <when test="name != null">
                    name = #{name}
                </when>
                <when test="age != null">
                    age = #{age}
                </when>
                <otherwise>
                    1 = 1
                </otherwise>
            </choose>
        </where>
    </select>
    

11. <trim>, <where>, <set>

  • <trim> :用于自定义 SQL 语句的前缀和后缀。

    • 示例:

      <trim prefix="WHERE" suffixOverrides="AND">
          <if test="name != null">
              name = #{name} AND
          </if>
          <if test="age != null">
              age = #{age} AND
          </if>
      </trim>
      
  • <where> :自动处理条件中的 WHERE 子句,避免拼接空条件时产生语法错误。

    • 示例:
      <where>
          <if test="name != null">
              name = #{name}
          </if>
          <if test="age != null">
              AND age = #{age}
          </if>
      </where>
      
  • <set> :用于生成 UPDATE 语句中的 SET 子句,自动处理逗号问题。

    • 示例:

      <set>
          <if test="name != null">
              name = #{name},
          </if>
          <if test="age != null">
              age = #{age},
          </if>
      </set>
      

12. <foreach>

  • 作用:用于遍历集合类型参数(如 ListArray)并动态生成 SQL。

  • 示例:

    <select id="findUserByIds" parameterType="list" resultType="User">
        SELECT * FROM users WHERE id IN
        <foreach item="id" collection="list" open="(" separator="," close=")">
            #{id}
        </foreach>
    </select>
    
  • 属性

    • item:每次遍历时的变量名。
    • collection:需要遍历的集合。
    • opencloseseparator:用于控制生成的 SQL 语句的格式。

这些标签共同帮助 MyBatis 实现了灵活且动态的 SQL 映射,提高了开发效率。