注意:本教程使用的数据库脚本、数据模型和环境信息请参考 “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 条件的简单用法。