mybatis使用foreach遇到的一个坑

mybatis要在sql'中写‘in’条件时,需要用到foreach。
使用数组时,foreach如下写:
<foreach  item="ids" collection="array" index="index"  open="(" separator="," close=")">#{ids}  </foreach>
我认为传入的参数是ids,是个数组。
但在运行的时候始终提示:org.apache.ibatis.binding.BindingException: Parameter 'array' not found. 
找不到‘array’这个参数?

确实有个参数类型是array,但是参数名字是ids啊,甚至于我在Dao接口中定义方法时,使用的都是@Param("ids")这个标记。但mybatis就是提醒我找不到‘array’。
于是乎,干脆将输入参数定义为:@Param("array") String[] ids,这下好了,没有问题了。就是说mybatis需要一个数组,他就认array这个参数名。
还有一点,就是如果方法只有一个参数,那无所谓,有两个以上的参数才需要标记array。

然后,如果sql里面有两个‘in’,需要两个数组怎么办?
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Mybatis中的foreach一个非常常用的标签,用于在SQL语句中进行循环操作。在Mybatis中,我们经常会遇到需要批量插入或更新数据的情况,而foreach标签可以很方便地实现这一功能。 首先,我们可以使用foreach标签在SQL语句中进行批量插入数据。通过指定collection属性,我们可以传入一个集合对象,可以是List、Array或Map。然后,在foreach标签内部,我们可以通过item属性指定集合中的每个元素的别名,可以在SQL语句中使用这个别名来引用每个元素的属性值。在SQL语句中,我们可以使用#{item.property}的方式来引用每个元素的属性值。同时,我们还可以使用separator属性指定每个元素之间的分隔符。 例如,我们可以这样使用foreach标签来实现批量插入数据的功能: ``` INSERT INTO table (a, b, c, d) VALUES <foreach collection="list" item="item" separator=","> (#{item.a}, #{item.b}, #{item.c}, #{item.d}) </foreach> ``` 上述代码中,我们使用一个List对象作为参数传入,将List中的每个元素插入表中的对应列。 除了批量插入数据,我们还可以使用foreach标签实现批量更新数据。在更新数据时,我们可以使用foreach标签的open和close属性来指定更新语句的开始和结束符号。在SQL语句中,我们可以使用IN函数来判断某个字段的值是否在一个集合中,并使用foreach标签将集合中的元素传入IN函数中。 例如,我们可以这样使用foreach标签来实现批量更新数据的功能: ``` UPDATE table SET b = '10' WHERE a IN <foreach collection="list" item="item" open="(" close=")" separator=","> #{item.a} </foreach> ``` 上述代码中,我们使用一个List对象作为参数传入,将List中的每个元素作为待更新的字段值。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值