mybatis报错—— Invalid bound statement (not found): com.mapper.EmployeeMapper.updEmp

本文介绍了一个关于MyBatis框架的常见错误——Mapper接口中的方法与XML映射文件中的SQL标签不匹配导致的问题。具体表现为接口方法 updEmp 在XML文件中找不到对应的SQL语句标签,最终引发InvalidBoundStatement异常。

mybatis报错—— Invalid bound statement (not found): com.mapper.EmployeeMapper.updEmp

异常如下:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.mapper.EmployeeMapper.updEmp
    at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:223)
    at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:48)
    at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:59)
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52)
    at com.sun.proxy.$Proxy6.updagteEmp(Unknown Source)
    at com.test.Test_crud.test(Test_crud.java:40)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
................
................
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)


异常原因:
很简单,与映射文件绑定的Mapper接口中声明的方法,在Mapper.xml中找不到对应的SQL语句标签。
代码如下:
Mapper接口中的代码:

public interface EmployeeMapper {
    public Employee getEmpById(Integer id);
    public Integer addEmp(Employee employee);
    public void updEmp(Employee employee);
    public void deleteEmpById(Employee employee);
    public void deleteEmpById(int i);
}

Mapper.xml中的代码:

<!-- Mapper接口中声明的方法
    public void updEmp(Employee employee); 
-->
<!-- 接口中声明的方法为updEmp,与sql标签的id属性值updateEmp不相同,于是报错 -->
<update id="updateEmp">
    UPDATE `mybatis`.`tbl_employee` 
    SET `last_name`=#{lastName}, `gender`=#{gender}, `email`=#{email} WHERE (`id`=#{id});   
</update>

原因总结:
接口中声明的方法为updEmp,与sql标签的id属性值updateEmp不相同,导致加载Mapper接口时,mybatis找不到接口中的updEmp()方法所对应的sql标签(通过id值来对应),于是报Invalid bound statement (not found)——即找不到绑定的声明。

所以,Mapper中声明的方法,在绑定的映射文件中必须能找到对应的sql标签,且方法名与对应的sql标签的id值必须相同。

异常解决:
检查Mapper中声明的方法,是否都能在绑定的映射文件中找到对应的sql标签。如果有,则检查方法名与对应sql标签的id值是否相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值