注意:本教程使用的数据库脚本、数据模型和环境信息请参考 “MyBatis Plus环境准备” 章节,点击下载示例源码。
本文将介绍 or 和 and 条件器,它们定义如下:
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(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(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 条件的简单用法。