MyBatis XML映射文件与Mapper接口精准绑定的核心是:namespace必须严格等于接口全限定名,且SQL标签id必须与接口方法名完全一致(含大小写);XML路径需与接口包结构一致,parameterType和resultType须匹配方法签名,重载方法不被支持。

MyBatis 的 XML 映射文件要与 Mapper 接口精准绑定,核心在于 namespace 必须严格等于接口的全限定类名,且每个 SQL 标签的 id 必须与接口中对应方法名完全一致(包括大小写)。
namespace 必须与 Mapper 接口类路径完全一致
XML 文件中的 namespace 属性不是随意命名的别名,而是 MyBatis 定位接口的唯一依据。它必须是 Mapper 接口的完整包路径 + 类名,例如:
如果接口是 package com.example.mapper; public interface UserMapper { ... },那么 namespace 就不能写成 userMapper、UserDao 或漏掉包名。一旦不匹配,MyBatis 启动时可能不报错,但运行时会抛出 BindingException: Invalid bound statement。
SQL 标签 id 必须与接口方法名一一对应
每个 <select>、<insert>、<update>、<delete> 标签的 id 属性,就是该语句在 namespace 下的唯一标识,也必须和接口中方法名完全相同:
立即学习“Java免费学习笔记(深入)”;
-
<select id="findById" resultType="User">...→ 接口必须有User findById(Long id); -
<insert id="save" parameterType="User">...→ 接口必须有int save(User user); - 方法重载不被支持:两个同名方法(哪怕参数不同)会导致 XML 解析失败或调用错乱
parameterType 和 resultType 要与方法签名对齐
虽然 MyBatis 4.1+ 支持泛型自动推断,但显式声明更安全、可读性更强:
-
parameterType应为方法入参的实际类型(单个对象、Map、基本类型封装类等),如parameterType="com.example.entity.User"或parameterType="java.lang.Long" -
resultType用于简单映射(如返回 POJO、String、Integer),需与方法返回类型兼容;若返回复杂结构或需字段重命名,优先用resultMap - 使用
resultMap时,其id需全局唯一,且在<select resultMap="userResultMap">中引用
XML 文件路径必须与 namespace 匹配(推荐约定优于配置)
MyBatis 默认按 classpath 下的路径查找 XML 文件。最佳实践是让 XML 文件路径与接口包结构一致:
- 接口位置:
src/main/java/com/example/mapper/UserMapper.java - XML 位置:
src/main/resources/com/example/mapper/UserMapper.xml - 这样无需额外配置
mappers,MyBatis 会自动扫描加载(前提是 SqlSessionFactoryBuilder 加载了正确的位置) - 若 XML 放在其他目录(如
mapper/),需在 mybatis-config.xml 中显式注册:<mapper resource="mapper/UserMapper.xml"/>


















