Mybatis-plus 动态条件查询QueryWrapper使用时遇到的坑

内容为原创,转载请标注转载自http://t.csdn.cn/N3O7jicon-default.png?t=M5H6http://t.csdn.cn/N3O7j

在这里对name和alias_name模糊查询完,对data_type和data_layer_type进行筛选,再调用in,根据结果来看是.in不起作用,没做到筛选的作用。上面代码生成的sql语句如下:

SELECT id,name,alias_name,data_type,data_layer_type,description,creator,catalog_id,tenant_id,create_time,creator_id,update_time,operator_id,del_flag FROM sgeoc_template_data WHERE del_flag=0 AND name LIKE '%t%' OR alias_name LIKE '%t%'  AND catalog_id IN ('668b2cfec83df2385de8c04a00328400')) LIMIT 25

乍一看是没什么问题的,这里的坑在于忽略了在sql中AND是优先于OR的,所以这条sql语句在执行时条件就变成name like %t%或者(alias_name like %t%并且catalog_id 在catalogTreeIds中)。OR是有短路逻辑的,所以前面name符合的数据就都会被输出。

因此代码应该改成

 sql语句就会变成

SELECT id,name,alias_name,data_type,data_layer_type,description,creator,catalog_id,tenant_id,create_time,creator_id,update_time,operator_id,del_flag FROM sgeoc_template_data WHERE del_flag=0 AND (name LIKE '%t%' OR alias_name LIKE '%t%')  AND catalog_id IN ('668b2cfec83df2385de8c04a00328400')) LIMIT 25

将name like %t%和alias_name like %t%用()括起来了。in就起作用了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值