解决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 resultType
和parameterType
都是正常
3、系统运行 spring-ioc容器代理是可以获取到 ExcelWorkBookMapper
,但是就是找不到 listQuery2
方法
解决
最后定位到 是 mapper-locations
配置问题
mybatis:
mapper-locations: classpath:mapper/*.xml
红框选中的mapper.xml全都是异常,/excel/下的mapper文件无法被bind扫描,很奇怪
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