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

174 阅读2分钟

1.select标签:映射sql查询语句。

<select id="findUserById" parameterType="int" resultType="User">
    select * from user where id = #{id}
</select>

2.insert标签:映射sql新增语句。

<insert id="insertUser" parameterType="User">
    insert into user (name, age) values (#{name}, #{age})
</insert>

3.update标签:映射sql修改语句。

<update id="updateUser" parameterType="User">
    update user set name = #{name}, age = #{age} where id = #{id}
</update>

4.delete标签:映射sql删除语句。

<delete id="deleteUserById" parameterType="int">
    delete from user where id = #{id}
</delete>

5.if标签:对其中sql语句进行判断,为真标签内的sql语句才会添加到最终的sql语句中。

<select id="findUsersByCondition" resultType="User">
    select * from user
    <where>
        <if test="name!= null">
            name = #{name}
        </if>
        <if test="age!= null">
            and age = #{age}
        </if>
    </where>
</select>

6.foreach标签:用于循环遍历集合参数,并根据集合中的元素动态地生成 sql片段。

<select id="findUsersByIds" resultType="User">
    select * from user where id in
    <foreach collection="ids" item="id" open="(" separator="," close=")">
        #{id}
    </foreach>
</select>

7.where标签:在sql 语句中动态地添加 where 条件。如果传入的参数满足一定条件,才会生成 where 关键字和相应的条件语句。

<select id="findUsersByCondition" resultType="User">
    select * from user
    <where>
        <if test="name!= null">
            name = #{name}
        </if>
        <if test="age!= null">
            and age = #{age}
        </if>
    </where>
</select>

8.sql标签:定义可复用的 sql片段。

<sql id="userColumns">
    id, name, age
</sql>
<select id="findAllUsers" resultType="User">
    select <include refid="userColumns"/> from user
</select>

9.resultMap标签:定义数据库表字段和 Java 对象属性之间的映射关系。

<resultMap id="userResultMap" type="User">
    <id property="id" column="user_id"/>
    <result property="name" column="user_name"/>
    <result property="age" column="user_age"/>
</resultMap>

10.trim标签:灵活地在 sql片段的前后添加、删除或替换特定的字符串。

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

11.set标签:在更新语句中动态地生成 set子句。只有当传入的参数对应的字段值不为 null 时,才会在 set子句中包含该字段的更新语句。

<update id="updateUserSelectively" parameterType="User">
    update user
    <set>
        <if test="name!= null">
            name = #{name},
        </if>
        <if test="age!= null">
            age = #{age},
        </if>
    </set>
    where id = #{id}
</update>

12.choose,when,otherwise标签:类似于 Java 中的 switch-case-default 语句,用于根据不同的条件选择不同的 sql片段执行。

<select id="findUsersByCondition2" resultType="User">
    select * from user
    <where>
        <choose>
            <when test="name!= null">
                name = #{name}
            </when>
            <when test="age!= null">
                age = #{age}
            </when>
            <otherwise>
                1 = 1
            </otherwise>
        </choose>
    </where>
</select>

13.include标签:用于引用其他已定义的 sql片段,可以提高代码的可维护性和复用性。

<sql id="commonColumns">
    id, name
</sql>
<select id="findUsersWithInclude" resultType="User">
    select <include refid="commonColumns"/> from user
</select>

14.association标签:处理一对一的关联关系,将关联表的字段映射到 Java 对象的属性上。

<resultMap id="userWithDetailResultMap" type="User">
    <id property="userId" column="user_id"/>
    <result property="username" column="user_name"/>
    <association property="userDetail" javaType="UserDetail">
        <id property="detailId" column="detail_id"/>
        <result property="detailInfo" column="detail_info"/>
    </association>
</resultMap>