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

179 阅读2分钟
  1. <mapper> 标签

    • 作为映射文件的根元素,其他所有内容都包含在这个标签内。
    • namespace 属性用于区分不同的 mapper,通常是接口的全限定名。
  2. <select> 标签

    • 用于定义查询语句。
    • 可以设置参数类型(parameterType)和返回结果类型(resultType 或 resultMap)。
    • 示例:<select id="selectPerson" parameterType="int" resultType="com.example.Person"> SELECT * FROM person WHERE id = #{id} </select>
  3. <insert> 标签

    • 用于定义插入数据的语句。
    • 可以通过 useGeneratedKeys 和 keyProperty 来获取自增主键值。
    • 示例:<insert id="insertPerson" parameterType="com.example.Person"> INSERT INTO person(name, age) VALUES(#{name}, #{age}) </insert>
  4. <update> 标签

    • 用于定义更新数据的语句。
    • 示例:<update id="updatePerson" parameterType="com.example.Person"> UPDATE person SET name=#{name}, age=#{age} WHERE id=#{id} </update>
  5. <delete> 标签

    • 用于定义删除数据的语句。
    • 示例:<delete id="deletePerson" parameterType="int"> DELETE FROM person WHERE id=#{id} </delete>
  6. <sql> 标签

    • 用于定义可重用的 SQL 代码段。
    • 可以使用 <include> 标签引用这些片段。
    • 示例:`
<sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.email </sql>
`
<select id="selectUsers" resultType="User">
    SELECT
        <include refid="userColumns"><property name="alias" value="u"/></include>
    FROM some_table u
</select>

  1. <resultMap> 标签

    • 用于描述数据库结果集与对象之间的复杂映射关系。
    • 包含 <id> (标识符) 和 <result> (普通字段) 等子标签来映射列到 Java 对象属性。
    • 示例:<resultMap id="personResultMap" type="com.example.Person"> <id property="id" column="person_id"/> <result property="name" column="person_name"/> </resultMap>
  2. <parameterMap> 标签

    • 旧版 MyBatis 使用此标签来定义输入参数的映射关系,但新版推荐直接在 SQL 语句中使用 #{} 占位符。
    • 在新版本中不常用。
  3. <choose>, <when>, <otherwise> 标签

    • choose里面包含when、otherwise两个标签,choose是父标签,when和otherwise必须都要写在它里面,当 when 中有条件满足的时候,就会跳出 choose,即所有的 when 和 otherwise 条件中,只有一个会输出,当所有的条件都不满足的时候就输出 otherwise 中的内容。第一个when不满足则继续往下判断,直到满足为止,如果全不满足,则执行otherwise(相当于else)
  4. <if> 标签

    • 用于条件判断。
    • 示例:<if test="name != null"> AND name = #{name} </if>
  5. <foreach> 标签

    • 用于遍历集合,常用于 in 语句或批量操作。
    • 示例:<foreach item="item" index="index" collection="list" open="(" separator="," close=")"> #{item} </foreach>