or 和 and

注意:本教程使用的数据库脚本、数据模型和环境信息请参考 “MyBatis Plus环境准备” 章节,点击下载示例源码

本文将介绍 or 和 and 条件器,它们定义如下:

or(或,拼接SQL的 OR 语句)

or()
or(boolean condition)

参数说明:

  • condition:用于指定当前这个条件是否有效;如果为 true,则应用当前条件;如果为 false,则忽略当前条件。

注意:主动调用 or 表示紧接着下一个方法不是用 and 连接!(不调用or则默认为使用and连接)

实例:构建一个查询用户 id 等于1,或者用户名称为“张三”的查询条件,代码如下:

QueryWrapper<UserBean> wrapper = new QueryWrapper<>();
wrapper.eq("id",1);
wrapper.or();
wrapper.eq("name","老王");

上面查询条件对应的 SQL 语句为“id = 1 or name = '老王'”。

or 嵌套

or(Consumer<Param> consumer)
or(boolean condition, Consumer<Param> consumer)

参数说明:

  • consumer:构造查询条件的回调接口,你需要实现 accept 方法

  • condition:用于指定当前这个条件是否有效;如果为 true,则应用当前条件;如果为 false,则忽略当前条件。

实例:构造性别(sex)为 null,或者 sex='男' 且 薪水在 5000~6000 之间的用户信息,如下:

QueryWrapper<UserBean> wrapper = new QueryWrapper<>();
wrapper.isNull("sex");
wrapper.or(new Consumer<QueryWrapper<UserBean>>() {
    @Override
    public void accept(QueryWrapper<UserBean> userBeanQueryWrapper) {
        userBeanQueryWrapper.eq("sex", "男")
            .between("salary", 5000, 6000);
    }
});

and(与,and 嵌套)

and(Consumer<Param> consumer)
and(boolean condition, Consumer<Param> consumer)

参数说明:

  • consumer:构造查询条件的回调接口,你需要实现 accept 方法

  • condition:用于指定当前这个条件是否有效;如果为 true,则应用当前条件;如果为 false,则忽略当前条件。

实例:构造 sex 等于“男”,薪水在 5000~6000之间,年龄大于30,且姓“黄”的用户信息,如下:

QueryWrapper<UserBean> wrapper = new QueryWrapper<>();
wrapper.and(new Consumer<QueryWrapper<UserBean>>() {
    @Override
    public void accept(QueryWrapper<UserBean> userBeanQueryWrapper) {
        userBeanQueryWrapper.eq("sex", "男")
            .between("salary", 5000, 6000);
    }
});

wrapper.and(new Consumer<QueryWrapper<UserBean>>() {
    @Override
    public void accept(QueryWrapper<UserBean> userBeanQueryWrapper) {
        userBeanQueryWrapper.gt("age", 30)
            .likeRight("name", "黄");
    }
});

示例代码

(1)and 实例

package com.hxstrive.mybatis_plus.simple_mapper.condition;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.hxstrive.mybatis_plus.mapper.SimpleMapper;
import com.hxstrive.mybatis_plus.model.UserBean;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
import java.util.function.Consumer;

@RunWith(SpringRunner.class)
@SpringBootTest
class Condition17Test {

    @Autowired
    private SimpleMapper simpleMapper;

    @Test
    void contextLoads() {
        QueryWrapper<UserBean> wrapper = new QueryWrapper<>();
        wrapper.and(new Consumer<QueryWrapper<UserBean>>() {
            @Override
            public void accept(QueryWrapper<UserBean> userBeanQueryWrapper) {
                userBeanQueryWrapper.eq("sex", "男")
                    .between("salary", 5000, 6000);
            }
        });

        wrapper.and(new Consumer<QueryWrapper<UserBean>>() {
            @Override
            public void accept(QueryWrapper<UserBean> userBeanQueryWrapper) {
                userBeanQueryWrapper.gt("age", 30)
                    .likeRight("name", "黄");
            }
        });

        List<UserBean> userBeanList = simpleMapper.selectList(wrapper);
        System.out.println("result size=" + userBeanList.size());
    }

}

运行上面代码,输出结果如下:

Preparing: SELECT user_id,name,sex,age,face,salary,borthday FROM user WHERE ((sex = ? AND salary BETWEEN ? AND ?) AND (age > ? AND name LIKE ?))
Parameters: 男(String), 5000(Integer), 6000(Integer), 30(Integer), 黄%(String)
result size=0

(2)or 实例

package com.hxstrive.mybatis_plus.simple_mapper.condition;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.hxstrive.mybatis_plus.mapper.SimpleMapper;
import com.hxstrive.mybatis_plus.model.UserBean;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
import java.util.function.Consumer;

@RunWith(SpringRunner.class)
@SpringBootTest
class Condition18Test {

    @Autowired
    private SimpleMapper simpleMapper;

    @Test
    void contextLoads() {
        QueryWrapper<UserBean> wrapper = new QueryWrapper<>();
        wrapper.isNull("sex");
        // 根据 sex 和 salary 进行查询
        wrapper.or(new Consumer<QueryWrapper<UserBean>>() {
            @Override
            public void accept(QueryWrapper<UserBean> userBeanQueryWrapper) {
                userBeanQueryWrapper.eq("sex", "男")
                    .between("salary", 5000, 6000);
            }
        });

        // 根据 age 和 name 进行查询
        wrapper.or(new Consumer<QueryWrapper<UserBean>>() {
            @Override
            public void accept(QueryWrapper<UserBean> userBeanQueryWrapper) {
                userBeanQueryWrapper.gt("age", 30)
                    .likeRight("name", "黄");
            }
        });

        List<UserBean> userBeanList = simpleMapper.selectList(wrapper);
        System.out.println("result size=" + userBeanList.size());
    }

}

运行上面代码,输出结果如下:

Preparing: SELECT user_id,name,sex,age,face,salary,borthday FROM user WHERE (sex IS NULL OR (sex = ? AND salary BETWEEN ? AND ?) OR (age > ? AND name LIKE ?))
Parameters: 男(String), 5000(Integer), 6000(Integer), 30(Integer), 黄%(String)
result size=65

上面就是 and 和 or 条件的简单用法。


说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号