最常见的报错就是这个了: org. apache. ibatis.binding.BindingException: Invalid bound statement (not found): 找不到绑定的statement。 简单说,就是接口与xml要么是找不到,要么是找到了却匹配不到对应的方法id。 请按照如下步骤检查:
xxxMapper.java
文件上是否使用了注解@Mapper@MapperScan("com.zjq.**.mappers")
【注意扫描的包名是否正确】xxxMapper.xml
文件中的namespace是否正确指向到Mapper.java类的位置,例:<mapper namespace="com.zjq.xxxMapper">
xxxMapper.java
在被调用的地方需要注入@Autowired。如果有使用mybatis-plus,且安装了MyBatisX
插件,比较直观的看到xxxMapper.java中的方法和xxxMapper.xml中的id对应情况:
如果上述检查昨晚还是没有找到问题的点,这时候我们就需要检查对应的代码编译后的结果里面是否有对应的xxxMapper.xml文件了。
如果没有说明对应的.xml文件没有被扫描到,这时候我们需要检查配置文件mybatis-plus.mapper-locations
的配置是否配置了正确的mapper.xml文件路径。我遇到需要加载多个其他包里面的mapper.xml配置文件的情况,需要把mybatis-plus.mapper-locations按照如下配置:
mybatis-plus:
mapper-locations: classpath*:mapper/*.xml
如果classpath不加*,那么只会加载第一个包中的mapper.xml。
因为 mybatis 的代码生成插件,xml 文件是追加,如果你执行了两次生成的话,表的映射 xml 里的代码会生成两遍,会报如下错误:
Error parsing Mapper XML. Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.zjq.xxxMapper.BaseResultMap
会报如下错误:
Cause: org.apache.ibatis.builder.BuilderException: Error resolving JdbcType. Cause: java.lang.IllegalArgumentException: No enum constant org.apache.ibatis.type.JdbcType.xxxxx
解决方法:
结果集id写错会报如下错误:
org.apache.ibatis.builder.IncompleteElementException: Could not find result map com.zjq.xxxMapper.BaseResultMap
解决方法: 检查对应 resultMap 是否能找对应的实体。
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: Could not set property ‘userName’ of ‘class com.zjq.xxx’ with value ‘10086’ Cause: org.apache.ibatis.reflection.ReflectionException: There is no setter for property named ‘userName’ in ‘class com.zjq.xxx’
解决方法: 检查 resultMap 节点中或者 result 节点中的 property 属性名是否跟实体的属性是否对应。PS:找不到get属性报错处理类似。
本文内容到此结束了, 如有收获欢迎点赞👍收藏💖关注✔️,您的鼓励是我最大的动力。 如有错误❌疑问💬欢迎各位指出。 主页:共饮一杯无的博客汇总👨💻 保持热爱,奔赴下一场山海。🏃🏃🏃