这个错误是在使用mybatis和mapper的时候发生的,一般报这种错误都是因为配置不匹配,或者是写错了路径,或者是写的sql语句有了问题,但是我检查了很多遍都没有发现任何有关语句和路径的错误。
排除了这些低级错误的可能后,这里会报错的原因也基本就只有一个了,那就是mapper接口和mapper.xml文件没有映射起来,没有成功。
针对这个问题:
我首先检查了xml文件里的namespace是不是和mapper的实际位置一样,检查之后发现确实没问题:
这一步基本不会出错,因为我们都是使用插件(MybatisX)创造的文件,所以文件名字和路径是不会出问题的
同样的道理,sql语句中的select id 所输入的方法名字也是不会有错误的,因为都是插件帮我们创建的文件,我们甚至都没有自己动手打字,所以不可能出现自己输入错误的情况。
继续找错误的原因,网上查了一下,有可能是我们运行时没有把xml文件构建进去,所以导致运行的时候找不到,我检查了一下运行时候的配置:
发现他确实在运行的时候没有扫到这个xml文件,但我确确实实在yml文件里面配置了在运行时要扫描mapper目录下的文件,真是让人费解。
虽然解决方法很简单,只需要在运行的时候手动把mapper用到的xml文件放进去就好。
话虽如此,每次运行都要手动添加xml文件有点太离谱了,所以还是有必要找一找最根本的原因是出在了哪里。
经过网上查阅资料,我发现mybatis和mybatis-plus的依赖是有冲突的,可惜我的项目根本没用到plus也没有导入他的依赖,所以原因不是这个。
终于!!在配合网上攻略检查我的配置文件时,我发现我之前写的代码有点多余,而且我不知道他们是干什么用的,这引起了我的好奇:
询问了GPT后得知:
重点来了,最后一行他说“并且不进行任何占位符替换处理”,意味着我使用 * 来扫描mapper包下面的所有文件的方法是行不通的。看来这行filter代码就是罪魁祸首。把false改成true或者直接删掉这行代码就解决了问题!!重新运行项目,发现mybatis的xml文件出现在了target目录里,完美~