Mybatis中动态sql判断数组或者集合是否为空

当我从数据库中批量进行删除的时候发现,如果通过集合或者数组作为sql删除的参数传入的时候,如果数组或者集合为空的时候,sql语法就会报错。

比如

#delete from user id in(数组/集合的值)
delete from user id in ();

这个时候拼接的sql语句就是错误的。

如何解决呢?思路是进行判断,当数组或者集合不为空并且长度不为0的时候,遍历数组或者集合到in()中,当数组或者集合的长度为0或者为空的时候,查询结果为null,而不是报错。

难点就是如何在mybatis中进行数组的长度判断。

首先使用命名参数在接口中定义一个参数名

.@Param(参数名)int[] arr

//	实现用户信息批量删除
	/**
	 * 通过id批量删除指定的用户
	 * @param id 待删除的用户
	 * @return 受影响的行数
	 * 
	 */
	int deleteUserMessages(@Param("array")int[] id);

在xml文件中使用choose,when,otherwise进行判断

test里面写的是@Param命名参数定义的参数名,1=2表示恒不成立,当数组或者集合为空的时候,就会进入该判断条件中。,这时候拼接的SQL语句是:sql语法是正确的

delete from user where id in(1=2)
	<!-- 批量删除指定的用户 -->
	<delete id="deleteUserMessages">
			
		delete from user where id in(
		<choose>
		<when test="array !=null and array.length>0">
			<foreach collection="array" item="id" separator="," index="index">
				#{id}
			</foreach>
		</when>
		<otherwise>
			1=2
		</otherwise>
		</choose>
		
			)
			
	</delete>

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值