欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Mybatis plus where添加括号方式

程序员文章站 2022-06-16 12:46:29
目录mybatis plus where添加括号where或and后面的条件用括号括起来mybatis plus where添加括号list list = xxxx;que...

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是一样的

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