Mybatis plus where添加括号方式

 更新时间:2022年01月12日 09:52:48   作者:微风夏至  
这篇文章主要介绍了Mybatis plus where添加括号方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Mybatis plus where添加括号

List<String> list = xxxx;
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.and(wrapper -> {
            for(String bm : list) {
                wrapper.like("xxxxx", bm).or();
            }
            return wrapper;
        });
queryWrapper.like("xx", "xxx");

打印的效果大概如下:

select * from table_name where (colA like '%xx%' or colA like '%xx%') and colB like '%xx%'

where或and后面的条件用括号括起来

今天在使用mybatisplus时需要将and后面的or条件使用括号包起来

    @ApiOperation(value = "查看粉丝列表", notes = "查看粉丝列表")
    @PostMapping("/fansList")
    public ResultVO<ResultListVO<LitemallBusiness>> fansList(@RequestParam(value = "bid") Integer bid,
                                                             @RequestParam(value = "nickName", required = false) String nickName) {
       try {
            QueryWrapper<LitemallBusiness> queryWrapperw = new QueryWrapper<LitemallBusiness>();
            queryWrapperw.eq("pid", bid).or().eq("pid2",bid);
            if (nickName != null && !nickName.equals("")) {
                queryWrapperw.like("nick_name", nickName);
            }
            queryWrapperw.eq("deleted", false);
            List<LitemallBusiness> litemall_businessList = businessService.list(queryWrapperw);
            return ResponseUtil.okList(litemall_businessList);
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseUtil.serious();
        }
    }

打印输出的sql

select * form litemall_business where deleted=0 and pid=1 or pid2=1

此条sql是没办法满足我需要的数据

实际上的我需要执行的sql是需要把and后面的or用()包起来作为一个条件来查询

所以mybatisplus的原生查询方法需要修改为:

@ApiOperation(value = "查看粉丝列表", notes = "查看粉丝列表")
    @PostMapping("/fansList")
    public ResultVO<ResultListVO<LitemallBusiness>> fansList(@RequestParam(value = "bid") Integer bid,
                                                             @RequestParam(value = "nickName", required = false) String nickName) {
       try {
            QueryWrapper<LitemallBusiness> queryWrapperw = new QueryWrapper<LitemallBusiness>();
            queryWrapperw.and(wrapper -> wrapper.eq("pid", bid).or().eq("pid2", bid));
  //            queryWrapperw.eq("pid", bid).or().eq("pid2",bid);
            if (nickName != null && !nickName.equals("")) {
                queryWrapperw.like("nick_name", nickName);
            }
            queryWrapperw.eq("deleted", false);
            List<LitemallBusiness> litemall_businessList = businessService.list(queryWrapperw);
            return ResponseUtil.okList(litemall_businessList);
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseUtil.serious();
        }
    }

这样sql打印出来就是:

select * form litemall_business where deleted=0 and (pid=1 or pid2=1)

这样就满足了我把and后面的or作为一个整体

这里需要注意的是:我的mybatisplus版本是3.0.7.1,这个版本中是没有andNew()的方法,所以需要使用这种方法时查看你的版本是否和我的一样,还有一点要注意,不要丢弃了语句中的.and()

这里顺便补充一下andNew()的写法

//mybatisplus版本3.0.7.1 jdk1.8 
queryWrapperw.and(wrapper -> wrapper.eq("pid", bid).or().eq("pid2", bid));
//执行sql
select * form litemall_business where deleted=0 and (pid=1 or pid2=1)

//mybatisplus版本低于3.0.7.1
queryWrapperw.andNew().eq("pid", bid).or().eq("pid2", bid);
//执行sql
select * form litemall_business where deleted=0 and (pid=1 or pid2=1)

其实最终执行的sql是一样的

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java中的volatile关键字原理深入解析

    Java中的volatile关键字原理深入解析

    这篇文章主要介绍了Java中的volatile关键字原理深入解析,volatile是Java 编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量,需要的朋友可以参考下
    2023-12-12
  • smslib发短信实例代码(电脑发短信)

    smslib发短信实例代码(电脑发短信)

    smslib发短信实例,大家可以参考使用开发自己的程序
    2013-12-12
  • VerifyCodeServlet(一次性验证码)

    VerifyCodeServlet(一次性验证码)

    这篇文章主要介绍了VerifyCodeServlet一次性验证码的使用方法
    2017-05-05
  • java新人基础入门之递归调用

    java新人基础入门之递归调用

    这篇文章主要给大家介绍了关于java新人基础入门之递归调用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • Java微信分享接口开发详解

    Java微信分享接口开发详解

    这篇文章主要为大家详细介绍了Java微信分享接口开发的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • SpringData JPA中@OneToMany和@ManyToOne的用法详解

    SpringData JPA中@OneToMany和@ManyToOne的用法详解

    这篇文章主要介绍了SpringData JPA中@OneToMany和@ManyToOne的用法详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • 基于Java ORM框架的使用详解

    基于Java ORM框架的使用详解

    本篇文章是对Java中ORM框架的使用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Java并发编程之Volatile变量详解分析

    Java并发编程之Volatile变量详解分析

    Volatile关键字是Java提供的一种轻量级的同步机制,本篇文章深入浅出的讲讲Java并发编程的Volatile,通读本篇对大家的学习或工作具有一定的价值,需要的朋友可以参考下
    2021-10-10
  • SpringBoot 实现微信推送模板的示例代码

    SpringBoot 实现微信推送模板的示例代码

    这篇文章主要介绍了SpringBoot 实现微信推送模板,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • json-lib将json格式的字符串,转化为java对象的实例

    json-lib将json格式的字符串,转化为java对象的实例

    下面小编就为大家带来一篇json-lib将json格式的字符串,转化为java对象的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03

最新评论