关于Mybatis-plus中or和and的使用问题

今天在集成权限的时候

发现多条件查询的or和and的拼接出了问题

查看了执行SQL后发现了两种拼接方式

第一种:

查询条件:

queryWrapper.lambda().in(QueQueueEntity::getWarehouseSid, warehouseSids).or().in(QueQueueEntity::getLocationSid, locationSids);
queryWrapper.lambda().in(QueQueueEntity::getStatus, list);
queryWrapper.select("QUE_QUEUE.*, row_number()over(partition by QUEUE_GROUP_SID order by SEQ_PRIORITY) PARK_ORDER");

条件1:  权限集成

条件2:  查询指定状态

条件3: 分组后组内排序函数

执行sql:

SELECT * FROM ( SELECT TMP.*, ROWNUM ROW_ID FROM ( SELECT QUE_QUEUE.*, row_number()over(partition by QUEUE_GROUP_SID order by SEQ_PRIORITY) PARK_ORDER FROM ITMP.QUE_QUEUE WHERE REMOVE_STATUS=0 AND 
(status IN (1,2,3) AND WAREHOUSE_SID IN (232,243) OR LOCATION_SID IN (6387)) 
) TMP WHERE ROWNUM <=20) WHERE ROW_ID > 10

此种写法将条件按顺序拼接

第二种:

查询条件:

queryWrapper.lambda().and(wrapper -> wrapper.in(QueQueueEntity::getWarehouseSid,warehouseSids).or().in(QueQueueEntity::getLocationSid, locationSids));
queryWrapper.lambda().in(QueQueueEntity::getStatus, list);
queryWrapper.select("QUE_QUEUE.*, row_number()over(partition by QUEUE_GROUP_SID order by SEQ_PRIORITY) PARK_ORDER");

条件1:  权限集成

条件2:  查询指定状态

条件3: 分组后组内排序函数

执行sql:

SELECT * FROM ( SELECT TMP.*, ROWNUM ROW_ID FROM ( SELECT QUE_QUEUE.*, row_number()over(partition by QUEUE_GROUP_SID order by SEQ_PRIORITY) PARK_ORDER FROM ITMP.QUE_QUEUE WHERE REMOVE_STATUS=0 AND 
(status IN (1,2,3) AND (WAREHOUSE_SID IN (232,243) OR LOCATION_SID IN (6387))) 
) TMP WHERE ROWNUM <=20) WHERE ROW_ID > 10

此种写法先拼接or后拼接and

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值