解决 Invalid bound statement (not found): XXXX 异常

解决Invalid bound statement not found 异常

  • 异常环境
  • 解决

异常环境

1、异常提示找不到 listQuery2方法

Caused by: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.huaw.mapper.excel.ExcelWorkBookMapper.listQuery2

2、MyBatis插件是正常的(不存在 select(ID)方法名不一致、namespace - mapper不一致问题)
插件是正常的,xml resultTypeparameterType都是正常
解决 Invalid bound statement (not found): XXXX 异常_第1张图片
3、系统运行 spring-ioc容器代理是可以获取到 ExcelWorkBookMapper,但是就是找不到 listQuery2方法
解决 Invalid bound statement (not found): XXXX 异常_第2张图片

解决

最后定位到 是 mapper-locations 配置问题

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

红框选中的mapper.xml全都是异常,/excel/下的mapper文件无法被bind扫描,很奇怪

解决 Invalid bound statement (not found): XXXX 异常_第3张图片
classpath:mapper/*.xml 这样的写法并没有递归所有文件目录

这样的写法 只能扫描到 resource/mapper/*.xml文件。是不能递归扫描到 resource/mapper/excel/*.xml

因为我一直用的都是 ibatis-plus, classpath:mapper/*.xml 这样的写法 在 MyBatis-PLUS 里面是可以的,这样是可以递归所有目录文件, 需要换一种写法:

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

重新构建编译项目运行 一切正常了

MyBatis-PLUS 换回 MyBatis 发现 有些写法mybatis是不支持的,就拿我遇到的下面两个,plus是正常的,但是mybatis不行

  • xml sql语句 使用动态列名,使用 parameterType 返回 List或者当个对象,调用方法会发现返回的对象或者集合对象是空的,不会自动的把列字段名与对象字段名相互映射,需要使用 resultMap 指定映射关系。
  • classpath:mapper/*.xml 并不会递归扫描mapper下所有目录文件

建议还是少用MyBatis-PLUS 感觉太智能方便会让开发习惯都变得懒惰了,我也是觉得太方便了,才换回来的ibatis

你可能感兴趣的:(SpringBoot,java,mybatis,springboot)