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

146 阅读1分钟

一、<select>标签
用于定义查询语句。
示例:

<select id="findUserById" parameterType="int" resultType="com.example.User">
    SELECT * FROM user WHERE id = #{id}
</select>

二、<insert>标签
用于定义插入语句。
示例:

<insert id="insertUser" parameterType="com.example.User">
    INSERT INTO user (name, age) VALUES (#{name}, #{age})
</insert>

三、<update>标签
用于定义更新语句。
示例:

<update id="updateUser" parameterType="com.example.User">
    UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}
</update>

四、<delete>标签
用于定义删除语句。
示例:

<delete id="deleteUserById" parameterType="int">
    DELETE FROM user WHERE id = #{id}
</delete>

五、<resultMap>标签
用于自定义结果映射关系。
示例:

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

六、<sql>标签
用于定义可复用的 SQL 片段。
示例:

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

八、<include>标签
用于引用 <sql> 标签定义的 SQL 片段。
示例:

<select id="findAllUsers" resultType="com.example.User">
    SELECT <include refid="userColumns"/> FROM user
</select>

九、<where>标签
用于在查询条件中动态添加 WHERE 关键字。
示例:

<select id="findUsersByConditions" parameterType="com.example.User" resultType="com.example.User">
    SELECT * FROM user
    <where>
        <if test="name!= null">AND name = #{name}</if>
        <if test="age!= null">AND age = #{age}</if>
    </where>
</select>

十、<if>标签
用于根据条件判断是否添加 SQL 片段。
示例:同上述 <where> 中的用法。

<select id="findUsersByConditions" parameterType="com.example.UserQuery" resultType="com.example.User">
    SELECT * FROM users
    <where>
        <if test="age!= null">
            age = #{age}
        </if>
        <if test="gender!= null">
            AND gender = #{gender}
        </if>
    </where>
</select>

十一、<choose><when><otherwise>标签
用于类似 switch-case 的条件判断。
示例:

<select id="findUsersByComplexConditions" resultType="com.example.User">
    SELECT * FROM user
    <where>
        <choose>
            <when test="name!= null and age!= null">AND name = #{name} AND age = #{age}</when>
            <when test="name!= null">AND name = #{name}</when>
            <when test="age!= null">AND age = #{age}</when>
            <otherwise>AND 1=1</otherwise>
        </choose>
    </where>
</select>

十二、<foreach>标签
用于循环遍历集合参数,生成 IN 条件等。
示例:

<select id="findUsersByIds" parameterType="java.util.List" resultType="com.example.User">
    SELECT * FROM user WHERE id IN
    <foreach collection="list" item="id" open="(" separator="," close=")">
        #{id}
    </foreach>
</select>

十三、<trim>标签
用于去除 SQL 片段中的多余字符,如多余的 AND、OR 等。
示例:

<select id="findUsersByTrim" resultType="com.example.User">
    SELECT * FROM user
    <trim prefix="WHERE" prefixOverrides="AND |OR ">
        <if test="name!= null">AND name = #{name}</if>
        <if test="age!= null">AND age = #{age}</if>
    </trim>
</select>

十四、<bind>标签
用于在 SQL 语句中创建新的变量。
示例:

<select id="findUsersByNameLike" resultType="com.example.User">
    SELECT * FROM user
    <bind name="nameLike" value="'%' + name + '%'"/>
    WHERE name LIKE #{nameLike}
</select>

十五、<set>标签
用于在更新语句中动态设置需要更新的字段,去除多余的逗号。
示例:

<update id="updateUserPartial" parameterType="com.example.User">
    UPDATE user
    <set>
        <if test="name!= null">name = #{name},</if>
        <if test="age!= null">age = #{age},</if>
    </set>
    WHERE id = #{id}
</update>