常用的 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 子句,并自动处理前缀 AND 或 OR。

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 的熟练使用。

相关推荐
代码什么用14 小时前
在WEB中的应用
mybatis
牧瀬クリスだ15 小时前
Mybatis-Plus:让CRUD快如闪电
java·spring boot·spring·tomcat·mybatis·yml
九皇叔叔1 天前
【09】SpringBoot4 MyBatisPlus 增删改查(CRUD)
java·mybatis·mybatisplus
景熙55231 天前
JDBC 详解:从原理到实战(含完整可运行 Demo)
java·spring·tomcat·mybatis·jdbc
程序猿乐锅1 天前
一文讲透缓存穿透、击穿和雪崩
java·redis·spring·缓存·mybatis
程序猿乐锅1 天前
【黑马点评 | 第九篇】秒杀优化-异步实现
java·spring boot·redis·后端·spring·中间件·mybatis
大漠孤烟s2 天前
7.mybatisplus学习-条件构造器、插件、通用枚举、多数据源环境、MybatisX
mybatis
ee又momo2 天前
MyBatis-Plus 用了就回不去,这些功能真香
mybatis
大漠孤烟s8 天前
4.Mybatis学习-动态sql、缓存、逆向工程
mybatis
毕业设计70310 天前
(免费领源码) SpringBoot 游戏交易平台17600-java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
java·spring boot·mysql·决策树·mybatis·idea·推荐算法