背景
昨天在使用SpringBoot + Mybatis-plus进行项目开发,使用Mybatisx工具根据表结构自动生成domain、mapper、service类,在进行方法测试的时候,出现报错:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
昨天困扰了一下午 + 半个晚上,今天早上最后成功解决
解决过程
1.mapper和xml映射关系排查
网上普遍的思路都是排查mapper接口和xml映射是否出现问题,所以需要排查:
- xml文件的 namespace 和 mapper接口名 是否一致
- xml的 sql语句id 与 接口方法 是否一致
- mapper接口是否被扫描
- 选项一:在启动类添加@MapperScan("com.省略.mapper")扫描,指定到具体的mapper所在的包
- 选项二:在mapper接口上添加@Mapper注解
- 二者选择其中一种方法就好
- 检查mybatis-plus的配置路径是否正确(不一定是图中这个地址,具体根据自己的地址,这个地址对应的是resourcess下的mapper文件夹)
2.pom.xml文件排查(对导入包排查)
经过上面的排查后,没有发现任何问题,依旧报错
后面对导入的包进行排查,也就是pom.xml文件
一开始使用的SpringBoot版本是3.2.1,mybatis-spring-boot版本是3.0.3
后面将这两个的版本进行修改
再运行测试用例就没有报错了,成功解决。
当导入的依赖版本进行修改之后,注意也要修改使用对应版本的注解
总结一下,应该是springboot和mybatis版本依赖出现的问题
补充1
在导入的包中还有一个依赖,叫mybatis-plus-support
这个包中也有一个@TableName注解,经过尝试后发现,使用哪一个包中的注解都没有问题
但事实上可以不需要mybatis-plus-support这个依赖
补充2
在使用Mybatisx生成domain对象的时候,不要生成多对多的表,也就是使用两个@TableId,会出现报错