MyBatis Mapper XML 核心知识笔记(入门)

一、Mapper XML 基础结构

1
2
3
4
5
6
7
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="全限定接口名">
<!-- CRUD 标签在此定义 -->
</mapper>
  • <?xml ... ?>:XML 文档声明,指定版本和编码。
  • <!DOCTYPE ... >:MyBatis Mapper 的 DTD 约束,用于校验 XML 结构合法性。
  • <mapper namespace="...">:命名空间,需与对应的 Mapper 接口全类名一致,是 XML 与接口绑定的关键。

二、Mapper XML 与 DAO 接口的映射关系

DAO 层概念 Mapper XML 对应配置 说明
DAO 接口 <mapper namespace="接口全类名"> 命名空间与接口全类名一一对应
DAO 方法 CRUD 标签的 id 属性 id 需与接口方法名完全一致
方法返回值类型 CRUD 标签的 resultType 或 resultMap 对应方法的返回值类型(实体类、基本类型等)
方法参数 CRUD 标签内的 #{参数名} 对应方法的参数,支持 OGNL 表达式取值

三、CRUD 标签使用(以员工表 t_emp 为例)

1. 查询(<select>

1
2
3
4
5
6
<select id="方法名" resultType="实体类全类名">
SELECT * FROM t_emp WHERE id = #{id}
</select>
<select id="方法名" resultType="实体类全类名">
SELECT * FROM t_emp
</select>
  • id:与 Mapper 接口方法名一致。
  • resultType:指定查询结果的封装类型(实体类、List 等)。

2. 新增(<insert>

普通新增

1
2
3
4
<insert id="方法名">
INSERT INTO t_emp(emp_name, emp_salary)
VALUES(#{empName}, #{empSalary})
</insert>

自增 ID 自动回填

1
2
3
4
<insert id="方法名" useGeneratedKeys="true" keyProperty="实体类中ID属性名">
INSERT INTO t_emp(emp_name, emp_salary)
VALUES(#{empName}, #{empSalary})
</insert>
  • useGeneratedKeys="true":开启自增主键回填功能。
  • keyProperty="empId":指定实体类中接收自增 ID 的属性名。

3. 修改(<update>

1
2
3
4
5
<update id="方法名">
UPDATE t_emp
SET emp_salary=#{empSalary}
WHERE emp_id=#{empId}
</update>

4. 删除(<delete>

1
2
3
<delete id="方法名">
DELETE FROM t_emp WHERE id = #{id}
</delete>

四、核心优势与规范

  • 解耦性:SQL 与 Java 代码分离,便于维护和优化。
  • 映射规范namespace 与接口全类名一致,id 与方法名一致,保证 XML 与接口的强绑定。
  • 参数与结果映射:通过 #{参数名} 取参,resultType/resultMap 封装结果,简化数据操作流程。