当前位置:   article > 正文

QueryWrapper and()和or()的问题

querywrapper and

问题记录1、QueryWrapper and()和or()的问题

错误代码

QueryWrapper<DeviceInfoDO> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("enterprise_id",tSysUser.getEnterpriseId());
queryWrapper
         .like("device_sn",pageQuery.getKeyword())
         .or()
         .like("device_name",pageQuery.getKeyword())
         .or()
         .like("device_factory",pageQuery.getKeyword());
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

根据上面的写法写出的sql语句如下:

WHERE enterprise_id = '98ca9c7540ee476fb931b92d6d1c3cda' 
	AND device_sn LIKE '%1%' 
	OR device_name LIKE '%1%' 
	OR device_factory LIKE '%1%'
  • 1
  • 2
  • 3
  • 4

这样明显是不对的,根据mysql语句执行顺序or最后执行 ,所以第一个条件 并没有起到and的作用。

解决方法


QueryWrapper<DeviceInfoDO> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("enterprise_id",tSysUser.getEnterpriseId());
queryWrapper.and(wrapper->wrapper
                    .like("device_sn",pageQuery.getKeyword())
                    .or()
                    .like("device_name",pageQuery.getKeyword())
                    .or()
                    .like("device_factory",pageQuery.getKeyword())
            );
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

这样得到的sql语句如下

WHERE enterprise_id = '98ca9c7540ee476fb931b92d6d1c3cda' 
AND (device_sn LIKE '%1%' 
OR device_name LIKE '%1%' 
OR device_factory LIKE '%1%')
  • 1
  • 2
  • 3
  • 4

这样就可以了

附加MySQL语句执行顺序

1、from
2、where (or 最后执行)
3、group by
4、having
5、DISTINCT
6、order by
7、limit

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/158344?site
推荐阅读
相关标签
  

闽ICP备14008679号