常用的 MyBatis 标签及其作用

MyBatis 是一个优秀的持久层框架,它通过 XML 或注解的方式将 Java 对象与数据库操作进行映射。在 MyBatis 的 XML 映射文件中,可以使用多种标签来定义 SQL 语句、参数映射、结果映射等。以下是一些常用的 MyBatis 标签及其作用:


1. 基本标签

1.1 <select>

用于定义查询语句。

xml 复制代码
<select id="selectUser" resultType="User">
    SELECT * FROM user WHERE id = #{id}
</select>
  • id:唯一标识符,用于在 Java 代码中调用。
  • resultType:返回结果的类型(可以是 Java 类型或别名)。
  • resultMap :引用一个结果映射(<resultMap>)。
1.2 <insert>

用于定义插入语句。

xml 复制代码
<insert id="insertUser" parameterType="User">
    INSERT INTO user (name, age) VALUES (#{name}, #{age})
</insert>
  • parameterType:参数类型(可以是 Java 类型或别名)。
  • useGeneratedKeys:是否使用数据库生成的主键。
  • keyProperty:将生成的主键值赋值给哪个属性。
1.3 <update>

用于定义更新语句。

xml 复制代码
<update id="updateUser" parameterType="User">
    UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}
</update>
1.4 <delete>

用于定义删除语句。

xml 复制代码
<delete id="deleteUser" parameterType="int">
    DELETE FROM user WHERE id = #{id}
</delete>

2. 参数映射标签

2.1 <parameterMap>(已废弃)

用于定义参数映射(不推荐使用,建议使用 parameterType@Param 注解)。

2.2 <parameter>

用于定义参数映射的细节(通常与 <parameterMap> 一起使用,已废弃)。


3. 结果映射标签

3.1 <resultMap>

用于定义复杂的结果映射。

xml 复制代码
<resultMap id="userResultMap" type="User">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="age" column="age"/>
</resultMap>
  • id:唯一标识符。
  • type:映射的 Java 类型。
  • <id>:主键字段映射。
  • <result>:普通字段映射。
3.2 <result>

用于定义单个字段的映射。

xml 复制代码
<result property="name" column="name"/>
  • property:Java 对象的属性名。
  • column:数据库表的列名。
3.3 <association>

用于映射一对一关联关系。

xml 复制代码
<association property="department" javaType="Department">
    <id property="id" column="dept_id"/>
    <result property="name" column="dept_name"/>
</association>
  • property:Java 对象的属性名。
  • javaType:关联对象的类型。
3.4 <collection>

用于映射一对多关联关系。

xml 复制代码
<collection property="orders" ofType="Order">
    <id property="id" column="order_id"/>
    <result property="orderNo" column="order_no"/>
</collection>
  • property:Java 对象的属性名。
  • ofType:集合中元素的类型。

4. 动态 SQL 标签

4.1 <if>

用于条件判断。

xml 复制代码
<select id="findUser" resultType="User">
    SELECT * FROM user
    WHERE 1=1
    <if test="name != null">
        AND name = #{name}
    </if>
    <if test="age != null">
        AND age = #{age}
    </if>
</select>
  • test:判断条件(OGNL 表达式)。
4.2 <choose><when><otherwise>

用于多条件判断。

xml 复制代码
<select id="findUser" resultType="User">
    SELECT * FROM user
    WHERE 1=1
    <choose>
        <when test="name != null">
            AND name = #{name}
        </when>
        <when test="age != null">
            AND age = #{age}
        </when>
        <otherwise>
            AND status = 1
        </otherwise>
    </choose>
</select>
4.3 <where>

用于动态生成 WHERE 子句,并自动处理前缀 ANDOR

xml 复制代码
<select id="findUser" resultType="User">
    SELECT * FROM user
    <where>
        <if test="name != null">
            AND name = #{name}
        </if>
        <if test="age != null">
            AND age = #{age}
        </if>
    </where>
</select>
4.4 <set>

用于动态生成 SET 子句,并自动处理后缀逗号。

xml 复制代码
<update id="updateUser" parameterType="User">
    UPDATE user
    <set>
        <if test="name != null">
            name = #{name},
        </if>
        <if test="age != null">
            age = #{age},
        </if>
    </set>
    WHERE id = #{id}
</update>
4.5 <trim>

用于自定义字符串截取。

xml 复制代码
<update id="updateUser" parameterType="User">
    UPDATE user
    <trim prefix="SET" suffixOverrides=",">
        <if test="name != null">
            name = #{name},
        </if>
        <if test="age != null">
            age = #{age},
        </if>
    </trim>
    WHERE id = #{id}
</update>
  • prefix:前缀。
  • suffixOverrides:需要移除的后缀。
4.6 <foreach>

用于遍历集合。

xml 复制代码
<select id="findUsersByIds" resultType="User">
    SELECT * FROM user
    WHERE id IN
    <foreach collection="ids" item="id" open="(" separator="," close=")">
        #{id}
    </foreach>
</select>
  • collection:集合属性名。
  • item:集合中元素的别名。
  • open:开始符号。
  • separator:分隔符。
  • close:结束符号。

5. 其他标签

5.1 <sql>

用于定义可重用的 SQL 片段。

xml 复制代码
<sql id="userColumns">
    id, name, age
</sql>

<select id="selectUser" resultType="User">
    SELECT <include refid="userColumns"/> FROM user
</select>
5.2 <include>

用于引用 <sql> 标签定义的 SQL 片段。

xml 复制代码
<select id="selectUser" resultType="User">
    SELECT <include refid="userColumns"/> FROM user
</select>

6. 总结

MyBatis 提供了丰富的 XML 标签来定义 SQL 语句、参数映射、结果映射以及动态 SQL。常用的标签包括:

  • 基本标签<select><insert><update><delete>
  • 结果映射标签<resultMap><result><association><collection>
  • 动态 SQL 标签<if><choose><where><set><foreach>
  • 其他标签<sql><include>

掌握这些标签的使用,可以更灵活地编写 MyBatis 的 SQL 映射文件。


7. 面试回答建议

在面试中回答这个问题时,可以按照以下思路:

  1. 分类介绍 MyBatis 的常用标签(基本标签、结果映射标签、动态 SQL 标签等)。
  2. 结合实际项目经验,举例说明如何使用这些标签。
  3. 强调动态 SQL 标签的优势(如 <if><foreach> 等)。

这样回答既展示了你的技术深度,也体现了你对 MyBatis 的熟练使用。

相关推荐
clk66074 小时前
SSM 框架核心知识详解(Spring + SpringMVC + MyBatis)
java·spring·mybatis
愿你天黑有灯下雨有伞10 小时前
MyBatis-Plus LambdaQuery 高级用法:JSON 路径查询与条件拼接的全场景解析
mysql·json·mybatis
万能的编程语言15 小时前
mybatis 参数绑定错误示范(1)
java·mybatis
贺函不是涵16 小时前
【沉浸式求职学习day52】【初识Mybaits】
java·学习·mybatis
the_seventh_dog20 小时前
mybatis和hibernate区别
java·mybatis·hibernate
HGW6891 天前
基于MyBatis插件实现动态表名解决多环境单一数据库问题
数据库·mybatis
wangfenglei1234561 天前
mybatis打印完整的SQL,p6spy
数据库·sql·mybatis
果壳~1 天前
【Java】mybatis-plus乐观锁与Spring重试机制
java·spring·mybatis
星star~1 天前
MyBatis相关面试题
java·开发语言·mybatis
会飞的架狗师2 天前
为何选择Spring框架学习设计模式与编码技巧?
学习·spring·mybatis