Invalid bound statement (not found)

今天出现了Invalid bound statement (not found)这个问题,很简单就能发现是mybaits的文件映射问题。但是排查半天无果,最后发现是文件名出错了,实在坑的很。

看看这张图有什么问题吗?
像笔者平时建一个java类都喜欢使用多级建立的方式,就像图中com.XXX.XXX.XXX.Mapper,这样就会把文件夹和类都建好。问题就出现在这里,因为Java的包有自动匹配机制,能识别包和类,但是resources不行,结果建了一个名为com.XXX.XXX.XXX的包,如下图。

自然匹配不上。

因为,Mapper接口开发需要遵循以下规范:
1、 Mapper.xml文件中的namespace与mapper接口的类路径相同。
2、 Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
3、 Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同
4、 Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

所以,除了这个比较坑的原因外,mybatis匹配不上的主要原因还有以下:
1.Mapper.xml文件中namespace写的不对,检查xml文件所在package名称是否和Mapper接口所在的包名
2.Mapper接口的方法在Mapper.xml文件中没有,或者名字不匹配,然后执行Mapper接口会报错
3.Mapper.xml文件中的输入参数和输出参数与Mapper接口中的不同,尤其是复杂参数类型,例如List需要配置ResultMap。
4.mybatis的全局配置

properties

dbconfig.file.location=/IdeaProjects/test-demo/dong-dao/src/main/resources/dbconfig.conf

MybatisConfig

@MapperScan(value ="com.xxx.xxx.mapper")

参考文献:
https://blog.csdn.net/sundacheng1989/article/details/81630370?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.edu_weight&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.edu_weight
https://blog.csdn.net/adriansimon/article/details/89334973
https://blog.csdn.net/someby/article/details/96473263?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.add_param_isCf&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.add_param_isCf

你可能感兴趣的:(Invalid bound statement (not found))