命名空间必须与mapper接口全限定类名完全一致,如com.example.mapper.usermapper;sql标签id须与接口方法名严格一致;parametertype和resulttype需匹配参数与返回类型。

MyBatis 的 Mapper.xml 文件中,命名空间(namespace)必须与对应 Mapper 接口的**全限定类名完全一致**,SQL 语句通过 <select></select>、<insert></insert>、<update></update>、<delete></delete> 标签定义,每条语句的 id 必须与接口中方法名相同。
命名空间怎么写?
命名空间不是随便起的,它本质是“定位这个 XML 对应哪个 Java 接口”。必须严格匹配 Mapper 接口的完整包路径 + 类名:
- 接口定义:
com.example.mapper.UserMapper - 对应 XML 的 namespace:
com.example.mapper.UserMapper - 不能写成
userMapper、UserMapper.xml或漏掉包名 - 如果 namespace 错了,MyBatis 启动时可能不报错,但运行时调用方法会抛
BindingException
SQL 语句怎么写?id 和参数怎么对应?
每个 SQL 标签的 id 就是接口里方法的名字,参数类型由 parameterType 指定(可省略,MyBatis 能自动推断),返回类型用 resultType 或 resultMap 声明:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
单参数(如 int、String):直接在 SQL 中用
#{id}或#{value}引用 -
多个参数或对象:推荐传一个 POJO(如
User),SQL 中用#{username}、#{age}引用其属性 -
使用 Map 传参:用
#{keyName}引用 map 的 key -
动态 SQL(如条件查询):配合
<if></if>、<where></where>、<foreach></foreach>等标签使用
示例(查用户):
resultMap 怎么配合复杂映射?
当数据库字段名和 Java 属性名不一致,或需要关联查询(一对多、多对一)时,要用 <resultmap></resultmap> 显式配置映射关系:
-
id是 resultMap 的唯一标识,SQL 中通过resultMap="userResultMap"引用 -
<id></id>标签映射主键字段(提升性能),<result></result>映射普通字段 - 字段别名(AS)在 SQL 中写清楚,或用
column/property明确指定
示例:
常见易错点提醒
- XML 文件名建议和接口名一致(如
UserMapper.java→UserMapper.xml),并放在相同包路径下(或按 MyBatis 配置的 resource 路径) - SQL 标签里的
id区分大小写,必须和接口方法名 100% 一致 -
parameterType不强制写,但写上更清晰;resultType和resultMap二选一,不能同时用 - 注意 XML 头声明和 DTD 引用是否正确(MyBatis 3.4+ 推荐用 XSD)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










