在 Java + MyBatis 中,**“绑定错误”**最常见的是下面这类异常:
org.apache.ibatis.binding.BindingException:
Invalid bound statement (not found): xxx.xxx.Mapper.xxxMethod
意思就是:Mapper 接口里的方法,找不到对应的 SQL 映射。
下面按最常见原因 → 解决方案给你总结:
XML 中的 namespace 必须等于 Mapper 接口全限定名
❌ 错误示例:
<mapper namespace="com.demo.mapper.User">
✅ 正确:
<mapper namespace="com.demo.mapper.UserMapper">
接口方法名 ≠ XML 中的 id
接口:
User selectById(Long id);
XML:
<select id="selectByID" resultType="User">
❌ selectByID ≠ selectById
虽然不是“绑定错误”主因,但常一起出现:
resultType 写成不存在的类src/main/java 下的 XML 默认不会被打包
✅ 解决:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
或把 XML 放到:
resources/mapper/xxxMapper.xml
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
mybatis:
mapper-locations: classpath*:mapper/*.xml
❌ 忘记加注解或扫描
✅ 解决方式之一:
@Mapper
public interface UserMapper {}
或:
@MapperScan("com.demo.mapper")
例如:
List<User> list();
XML 却写成:
<select id="list" resultType="User">
✅ 实际是对的
❌ 如果写成 resultType="map" 可能间接导致问题
❌ 直接 new Mapper
UserMapper mapper = new UserMapper();
✅ 必须通过 SqlSession 或 Spring 注入
你可以按顺序查:
namespace = 接口全类名id = 接口方法名classpath 下mapper-locations 配置正确@Mapper 或 @MapperScan 扫描如果你愿意,可以把:
贴出来,我可以直接帮你定位是哪一条。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。