一、报错
springboot + mybatis 开发查询功能时新建了DAO接口和Mapper文件,启动项目后发现报错信息如下:
2021-09-08 15:09:28,839 INFO [http-nio-8091-exec-3] c.h.p.p.web.aspect.IntfOprtLogAspect [IntfOprtLogAspect.java : 117] 系统出错:Invalid bound statement (not found): cn.hsa.pss.pw.web.dao.ChronicApplyDAO.queryChronicApplyListByPageorg.apache.ibatis.binding.BindingException: Invalid bound statement (not found): cn.hsa.pss.pw.web.dao.ChronicApplyDAO.queryChronicApplyListByPage
二、原因
经过排查,发现问题在于spring配置文件中对mapper的映射扫描路径做了限制:
而我新建的mapper文件名并不是以Mapper结尾,所以建立映射关系失败。
三、解决思路
一般使用mybatis时报错**Invalid bound statement (not found)**
, 问题就在DAO和Mapper的映射不一致,可能是以下情况:
- 接口中方法名与xml文件中id不一致
- Mapper文件中的 namespace=”xxx.xxx.xxx.Mapper” 中的路径与接口文件不一致
- parameterType类型 与 resultType类型不准确(注意:要区分resultMap与resultType)
- target中存在缓存(mvn clean即可)
- spring配置包扫描路径问题
四、补充
后续mybatis集成mybatis-plus时,mapper文件位于resources目录下。又遇到了类似问题,解决办法:
将application.yml中的:
mybatis:
mapper-locations: classpath*:../resources/mapper/*.xml
改为:
mybatis-plus:
mapper-locations: classpath*:mapper/*.xml