bug记录:Mybatis-error:Parameter 'xxx' not found. Available parameters are [list]
2016-02-01 15:40
465 查看
背景:
写了个insert,传参是list,想着能够在xml里用foreach循环直接把整个list的数据都插入库里的,但是,报错了,报错的内容如标题,是说参数xxx,没有找到,可用的参数是list。然后我检查了一下resultMap和insert的sql写的内容没有拼写错误,实体类里面也没有拼写错误。传参是java里的List,也好像没问题。不知道怎么改了。还好项目里有打日志,发现它执行的时候只打出来了没带值的sql。查找原因
查了查看到这么一篇帖子 ,说的问题跟我遇到的报错一样。不一样的只是sql写的方法而已,我是循环写了多条sql语句,博主是在循环要插入的值。博主总结了自己见到过得几种问题(以下是原文摘抄):
查看parameterType的类型是不是java.util.List类型,如果是的话,看foreach 的collection属性是不是list。
因为 传递一个 List 实例或者数组作为参数对象传给 MyBatis,MyBatis 会自动将它包装在一个 Map 中,用名称在作为键。List 实例将会以“list” 作为键,而数组实例将会以“array”作为键
看一下foreach里面的值有没有传递进来
看foreach里面的名称字段是否写错
还有就是Mybatis的时候,用mysql的值插入自动增长值,里面的key我在数据库中没有设置自动增长,然后我又用了selectkey,所以也会出现这种情况。
解决方案
思来想去,感觉应该是没有传进foreach里面才会导致了它后来会报出没有那个字段的问题,但是我当时没有精神去查为什么没有传进来参数了,就改成了单条insert的方法在java代码里面循环进行插入了。现在想想,如果真的自动封装成map了,有两个点,第一,我写的是
List< T > xxx = new ArrayList< T >();是不是应该在collection的地方写成array?第二,我是不是写错了list的名字应该直接用传入的参数的名字来写吗?
但是现在这两个猜测都没办法验证,我只好先记下来再找时间进行验证了。。
增加知识储备
后来多查了一些,看到一篇文章:深入了解MyBatis参数 好像很有用的样子,只是我这会儿好困,又着急记下来其他遇到的问题,所以先存在这儿以后再看。相关文章推荐
- RAID详解
- intel Baytrail 平台audio驱动match流程
- filco minila air在debian下的蓝牙适配安装
- waitpid函数实例
- ug-Assertion failure in [MyClass layoutSublayersOfLayer:]
- 剪发 Haircut
- hdoj--1151--Air Raid(最大独立集)
- hdoj--1151--Air Raid(最大独立集)
- Starting httpd: httpd: apr_sockaddr_info_get() failed
- 【转】UltraISO制作U盘启动盘安装Win7/9/10系统攻略
- 【Xamain 跨平台机制原理剖析】
- tools:context=".MainActivity的作用
- rails s 命令不起作用
- 出现( linker command failed with exit code 1)错误总结
- [INS-41112] Specified network interface doesnt maintain connectivi
- Rails 使用 Google Analytics 示例
- [Regular Expressions] Find Plain Text Patterns
- A*启发式搜索算法详解 人工智能
- the usage of activity_main.xml
- 获取sina,baidu,google财经历史和实时股票数据接口