MyBatis-Plus中的LambdaQueryWrapper之动态添加不确定个数的or条件

MyBatis-Plus中的LambdaQueryWrapper之动态添加不确定个数的or条件

  在使用 MyBatis-Plus 的 LambdaQueryWrapper 时,如果对应方法的入参是个数不确定的,比如List<String> bridgeNames,而且需要对其中的所有变量,使用 or 操作,则写法如下

@GetMapping("/getAlert")
public Result<List<BridgeAlertRecord>> getAlert(
        @RequestParam(required = true) List<String> bridgeNames,
        @RequestParam(required = false) boolean includeDealt) {
    List<BridgeAlertRecord> alerts = null;
    LambdaQueryWrapper<BridgeAlertRecord> lqw = new LambdaQueryWrapper<>();
    if(!includeDealt) {        // 是否过滤掉已处理的预警
        lqw.eq(BridgeAlertRecord::getIsDeal, 0);		// 这是第一个条件
    }
    if(bridgeNames == null || bridgeNames.size() <= 0)
        return ResultUtil.error("未传递桥梁名称");
    // 动态地将所有的 bridgeName 加到 LambdaQueryWrapper 中,以 or 条件连接
    lqw.and(wq -> {
        for(int i = 0; i < bridgeNames.size(); i++) {
            wq.eq(BridgeAlertRecord::getBridgeName, bridgeNames.get(i));
            if(i < bridgeNames.size() - 1)		// 只要不是最后一个,则追加一个 or 操作符
                wq.or();
        }
    });
    log.info("测试,lqw: " + lqw.getTargetSql());
    alerts = bridgeAlertRecordService.list(lqw);
    return ResultUtil.success(alerts);
}

  测试一下:
  URL访问:

localhost:8001/acq/alert/getAlert?bridgeNames=白沙沟一号大桥&bridgeNames=岷江二桥

   后台打印结果如下:
  测试,lqw: (is_deal = ? AND (bridge_name = ? OR bridge_name = ?))
  动态拼接 or 语句成功,并且这一块条件在一个 () 中与其他模块的条件一起生效

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值