您的位置:首页 > 大数据 > 人工智能

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参数 好像很有用的样子,只是我这会儿好困,又着急记下来其他遇到的问题,所以先存在这儿以后再看。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: