// 参数
final List<UserOrder> userOrders = getUserOrders();

// 创建查询参数
LambdaQueryWrapper<UserOrder> lqw = new LambdaQueryWrapper<>();
lqw.eq(UserOrder::getChargeObjectType, "x");
lqw.and(ilqw -> {
            userOrders.forEach(o -> {
                ilqw.or(iilqw -> iilqw.eq(UserOrder::getUserId, o.getUserId()).eq(UserOrder::getUserType, o.getUserType()));
            });
        }
);

// 查询
List<UserOrder> list = userOrderService.list(lqw);

核心就是

lqw.and(ilqw -> {
            userOrders.forEach(o -> {
                ilqw.or(iilqw -> iilqw.eq(UserOrder::getUserId, o.getUserId()).eq(UserOrder::getUserType, o.getUserType()));
            });
        }
);
// 可以简化成一行
lqw.and(ilqw -> userOrders.forEach(o -> ilqw.or(iilqw -> iilqw.eq(UserOrder::getUserId, o.getUserId()).eq(UserOrder::getUserType, o.getUserType()))));

执行后sql

SELECT
    *
FROM
    user_order 
WHERE
    charge_object_type = ? AND ((user_type = ? AND user_id = ?) OR (user_type = ? AND user_id = ?))

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐