La base de datos mysql en mbatis usa la condición in, el número supera los 1000 y la solución al informe de error

La base de datos mysql en springboot-mbatis usa la condición in, y el número supera los 1000, y la solución al informe de error

Use la base de datos mysql en el proyecto, use las condiciones de consulta de in y la solución al número excesivo. Por ejemplo, el sql es el siguiente:

seleccione * de la tabla donde id en (1,2,...10000), si el número de en excede 1000, se informará un error

Solución 1: Agrupa los números y consulta varias veces. Es mejor ordenar primero, lo que puede reducir el tiempo de consulta (cuando hay un índice)
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);
    }
}

Solución 2: Modificar sql directamente, separados por o

Cambie al siguiente sql: seleccione * de la tabla donde id en (1,2,... 999) o (1000,1001,... 1888)

Debido a que el marco mybatis se usa en el proyecto, cada valor está separado por un separador ',', lo que da como resultado una coma adicional al final, por lo que debe agregar nulo

seleccione * de la tabla donde id en (1,2,……998,null) o (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>

Supongo que te gusta

Origin blog.csdn.net/qq798867485/article/details/130490301
Recomendado
Clasificación