SpringBoot-mbatis中Mysql数据库使用in条件,个数超过1000报错解决方法 在项目中使用mysql数据库,用到in的查询条件,个数过多的解决方案。例如sql如下: selec
在项目中使用mysql数据库,用到in的查询条件,个数过多的解决方案。例如sql如下:
select * from table where id in (1,2,……10000),in里面个数超过1000就会报错
List<Long> newAllReceiveIdList = allReceiveIdList.stream().sorted().distinct().collect(Collectors.toList());List<List<Long>> partitionReceiveIdList = Lists.partition(newAllReceiveIdList, 800);List<ReceiveBill> receiveBillList = new ArrayList<>();for (List<Long> singlePartitionReceiveIdList : partitionReceiveIdList) { if(CollUtil.isNotEmpty(singlePartitionReceiveIdList)){ LambdaQueryWrapper<ReceiveBill> receiveBillLambdaQueryWrapper = new LambdaQueryWrapper<ReceiveBill>() .in(ReceiveBill::getId, singlePartitionReceiveIdList) .eq(ReceiveBill::getDeleted, BoolEnum.NO.geTKEy()); List<ReceiveBill> billList = receiveBillService.list(receiveBillLambdaQueryWrapper); receiveBillList.addAll(billList); }}
改成类似以下sql:select * from table where id in (1,2,……999)or (1000,1001,…1888)
因为项目中使用了mybatis框架,每个值都是用’,'分隔符隔开,导致最后会多一个逗号,所以需要加上null
select * from table where id in (1,2,……998,null)or (998,1000,1001,…1888)
<if test="bo.receiveIds != null and bo.receiveIds.length != 0"> and ( f.id in <foreach item='receiveId' index='index' collection='bo.receiveIds' open='(' separator=',' close=')'> <if test = 'index%999== 998'> null ) or f.id in ( if> #{receiveId} foreach> )if>
来源地址:https://blog.csdn.net/qq798867485/article/details/130490301
--结束END--
本文标题: mbatis中mysql数据库使用in条件,个数超过1000报错解决方法
本文链接: https://lsjlt.com/news/416607.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-10-23
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0