mybatis报错的原因有很多,但是我发现我遇到的原因和网上能搜到的都不一样,所以在这里总结一下。
Invalid bound statement (not found)
1. parameterMap 错误
- 错误地点:mapper.xml中的parameterMap配置错误。
- 特点:一个配置错误就会导致所有对MySQL的读写都会报错,错误原因都是Invalid bound statement (not found)
今天为项目添加了一个新的数据表,以及一个新的mapper.xml。添加过后就开始报该错误。并且不止新添加的mapper,所有对数据库的读写操作都开始报错误。原因是因为有一个parameterMap没有对应上,导致整个mybatis都运行不了,不知道是不是因为这个版本的mybatis有问题,将parameterMap改正后就没有再报错了。
2. 新建的mapper文件未被纳入配置文件
- 错误地点:mybatis.xml
- 特点:老的mapper.xml文件运行正常,就自己加的不正常,且语法错误不会报错。
- 改正方式:在mybatis.xml中添加自己新建的mapper.xml,其代码格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<mappers>
<mapper resource="com/api/dao/MCT_DaoMapper.xml" />
<mapper resource="com/api/dao/MO_DaoMapper.xml" />
<mapper resource="com/api/dao/MOL_DaoMapper.xml" />
<mapper resource="com/api/dao/MOS_DaoMapper.xml" />
<mapper resource="com/api/dao/这里加上自己新建的mapper" />
</mappers>
</configuration>
这是我在修改jar包项目时遇到的,它通过在src/main/java/中的mybatis.xml文件来引入所有的mapper,在网上搜索这个异常搜了好久,最后还是靠自己找到了解决方法。
3. name space 错误
- 特点:按住Ctrl点击无法跳转到对应的接口类。
有可能是mapper下的namespace错误导致的。
可以在一下位置打上断点,查看mybatis从xml中所加载的所有方法。
在方法org.apache.ibatis.session.Configuration.getMappedStatement()
效果图如下:东西都在该变量下。
java.lang.UnsupportedOperationException
- 错误地点:mapper.xml所对应的接口类缺少注解。
- 特点:无明显特点。
- 改正方式:在接口类中加入
@Param("set")
注解。
接口类如下:
在xml中用<foreach>
来循环batchIds
,其中collection="batchIds"
。
//错误方法:
List<Map<String, Object>> getListByBatchIds(Set<Long> batchIds);
//正确方法:
List<Map<String, Object>> getListByBatchIds(@Param("batchIds") Set<Long> batchIds);
我一直以为只有一个参数的时候就不用加注解了,没想到对于集合来说不行。