MyBatis 是一个优秀的持久层框架,它通过 XML 或注解的方式将 Java 对象与数据库操作进行映射。在 MyBatis 的 XML 映射文件中,可以使用多种标签来定义 SQL 语句、参数映射、结果映射等。以下是一些常用的 MyBatis 标签及其作用:
用于定义查询语句。
<select id="selectUser" resultType="User">
SELECT * FROM user WHERE id = #{id}
select>
id
:唯一标识符,用于在 Java 代码中调用。resultType
:返回结果的类型(可以是 Java 类型或别名)。resultMap
:引用一个结果映射(
)。
用于定义插入语句。
<insert id="insertUser" parameterType="User">
INSERT INTO user (name, age) VALUES (#{name}, #{age})
insert>
parameterType
:参数类型(可以是 Java 类型或别名)。useGeneratedKeys
:是否使用数据库生成的主键。keyProperty
:将生成的主键值赋值给哪个属性。
用于定义更新语句。
<update id="updateUser" parameterType="User">
UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}
update>
用于定义删除语句。
<delete id="deleteUser" parameterType="int">
DELETE FROM user WHERE id = #{id}
delete>
(已废弃)用于定义参数映射(不推荐使用,建议使用 parameterType
或 @Param
注解)。
用于定义参数映射的细节(通常与
一起使用,已废弃)。
用于定义复杂的结果映射。
<resultMap id="userResultMap" type="User">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
resultMap>
id
:唯一标识符。type
:映射的 Java 类型。
:主键字段映射。
:普通字段映射。
用于定义单个字段的映射。
<result property="name" column="name"/>
property
:Java 对象的属性名。column
:数据库表的列名。
用于映射一对一关联关系。
<association property="department" javaType="Department">
<id property="id" column="dept_id"/>
<result property="name" column="dept_name"/>
association>
property
:Java 对象的属性名。javaType
:关联对象的类型。
用于映射一对多关联关系。
<collection property="orders" ofType="Order">
<id property="id" column="order_id"/>
<result property="orderNo" column="order_no"/>
collection>
property
:Java 对象的属性名。ofType
:集合中元素的类型。
用于条件判断。
<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 表达式)。
、
、
用于多条件判断。
<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>
用于动态生成 WHERE
子句,并自动处理前缀 AND
或 OR
。
<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>
用于动态生成 SET
子句,并自动处理后缀逗号。
<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>
用于自定义字符串截取。
<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
:需要移除的后缀。
用于遍历集合。
<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
:结束符号。
用于定义可重用的 SQL 片段。
<sql id="userColumns">
id, name, age
sql>
<select id="selectUser" resultType="User">
SELECT <include refid="userColumns"/> FROM user
select>
用于引用
标签定义的 SQL 片段。
<select id="selectUser" resultType="User">
SELECT <include refid="userColumns"/> FROM user
select>
MyBatis 提供了丰富的 XML 标签来定义 SQL 语句、参数映射、结果映射以及动态 SQL。常用的标签包括:
、
、
、
。
、
、
、
。
、
、
、
、
。
、
。掌握这些标签的使用,可以更灵活地编写 MyBatis 的 SQL 映射文件。
在面试中回答这个问题时,可以按照以下思路:
、
等)。这样回答既展示了你的技术深度,也体现了你对 MyBatis 的熟练使用。