SpringBoot集成mbatis出现Invalid bound statement (not found)的问题

mybatisapplication.yml 的具体配置如下所示:

mybatis:
  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath*:mybatis/mapper/mysql/**/**.xml
  type-aliases-package: com.dragonflyxd.lr.web.model.entity

在项目的入口 LrWebApplication 中也有添加扫描mapper文件的注解:

@MapperScan("com.dragonflyxd.lr.web.dal.**")

Dao层的代码结构截图如下所示:

clipboard.png

mybatis-config文件的具体内容如下:

clipboard.png

CategoryMapper的Mapper和xml的具体内容如下所示:

clipboard.png

clipboard.png


调用 /category/test 接口的时候,出现 "Invalid bound statement (not found): com.dragonflyxd.lr.web.dal.CategoryMapper.count" 的问题。

  • Mapper文件中的方法都已经在xml中对应。
  • xml文件的命名空间对应的是Mapper的包路径。
  • 项目启动后,Mapperxml文件能确定已经被编译。

    clipboard.png

阅读 38.6k
3 个回答

后经排查,发现是由于 xml 文件没找到的原因。
因为我在工程里建的 mapper.mysql 是个文件夹的名字,而不是包名,不符合 mapper-locations: classpath*:mybatis/mapper/mysql/**/**.xml

另说明,在 IDEA 里,resources下的目录,包名和文件名都可以使用 . ,见如下截图:

clipboard.png

在mapper的pojo上添加@Mapper注解,一个repository注解无法完成自动装配

在application.yml中修改:

mybatis:
  mapper-locations: classpath:mybatis/mapper/mysql/*.xml

其次:@MapperScan改为

@MapperScan("com.dragonflyxd.lr.web.dal")

报错信息是"Invalid bound statement (not found):com.dragonflyxd.lr.web.dal.CategoryMapper.count"无效的绑定声明

预计问题出在CategoryMapper.count这个函数命名上,你试试把CategoryMapper中的count()方法改成getCount(),对应的mapper.xml中的id也改成getCount()

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题