一、报错

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的映射扫描路径做了限制:
image.png
而我新建的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目录下。又遇到了类似问题,解决办法:

  1. application.yml中的:
  2. mybatis:
  3. mapper-locations: classpath*:../resources/mapper/*.xml
  4. 改为:
  5. mybatis-plus:
  6. mapper-locations: classpath*:mapper/*.xml