苍穹外卖——报错:Parameter 'xxx' not found. Available parameters are [arg0, collection, list]] with root cause
背景:
在执行过程中,报错:Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'orderDetails' not found. Available parameters are [arg0, collection, list]] with root cause.
疑问的点:代码方面都没有问题,但是往数据库中插入数据时一直报错,一直没找到原因。
解决:
将项目中的target文件夹删掉之后,解决了问题。
分析:
可能的原因有下面几种:
- 编译错误残留
- 在项目编译过程中,可能由于某些原因导致编译不完整或出现错误,这些错误被写入到了
target
文件夹中的编译结果文件中。例如,MyBatis 在生成映射文件的字节码或进行动态 SQL 解析时出现了问题,但错误结果被缓存到了编译后的文件中。 - 删除
target
文件夹后,项目重新编译,消除了之前的错误编译结果,从而解决了问题。
- 在项目编译过程中,可能由于某些原因导致编译不完整或出现错误,这些错误被写入到了
- 缓存问题
- MyBatis 或 Spring 框架在运行时可能会对一些配置或映射信息进行缓存。如果缓存的数据出现错误,就可能导致异常。而删除
target
文件夹后,这些缓存被清除,重新编译和运行时使用了正确的配置和映射。 - 可能是在开发过程中对 MyBatis 的映射文件或 Java 代码进行了修改,但缓存没有及时更新,导致运行时仍然使用旧的、错误的配置信息。
- MyBatis 或 Spring 框架在运行时可能会对一些配置或映射信息进行缓存。如果缓存的数据出现错误,就可能导致异常。而删除
- 依赖冲突或版本问题
target
文件夹中可能包含了一些旧版本的依赖库或编译后的文件,这些文件与当前项目的其他部分存在冲突。删除target
文件夹后,重新编译时会拉取正确版本的依赖,解决了冲突问题。- 可能是 MyBatis 的版本与其他框架(如 Spring)的版本不兼容,导致在运行时出现异常。重新编译可能会解决这种兼容性问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)