注意:本教程使用的数据库脚本、数据模型和环境信息请参考 “MyBatis Plus环境准备” 章节,点击下载示例源码。
本章节将介绍 in 和 notIn 条件,它们定义如下:
in(R column, Collection<?> value) in(boolean condition, R column, Collection<?> value) in(R column, Object... values) in(boolean condition, R column, Object... values)
参数说明:
column:列名称
value:要查询的目标值列表,如:ID列表
values:要查询的目标值数组,如:[1,2,3,5]
condition:用于指定当前这个条件是否有效;如果为 true,则应用当前条件;如果为 false,则忽略当前条件。
实例:查询 ID 为 1,2,3 的用户信息,如下:
QueryWrapper<UserBean> wrapper = new QueryWrapper<>(); wrapper.in("user_id", 1, 2, 3); // 等价 SQL 语句:user_id in(1, 2, 3) List<Integer> userIdList = new ArrayList<>(); userIdList.add(1); userIdList.add(2); userIdList.add(3); QueryWrapper<UserBean> wrapper = new QueryWrapper<>(); wrapper.in("user_id", userIdList ); // 等价 SQL 语句:user_id in(1, 2, 3)
notIn(R column, Collection<?> value) notIn(boolean condition, R column, Collection<?> value) notIn(R column, Object... values) notIn(boolean condition, R column, Object... values)
参数说明:
column:列名称
value:要查询的目标值列表,如:ID列表
values:要查询的目标值数组,如:[1,2,3,5]
condition:用于指定当前这个条件是否有效;如果为 true,则应用当前条件;如果为 false,则忽略当前条件。
实例:查询所有性别不是“男”或“女”的用户列表,如下:
QueryWrapper<UserBean> wrapper = new QueryWrapper<>(); wrapper.notIn("sex", "男", "女"); // 等价 SQL 语句:sex not in("男", "女") List<Integer> sexList= new ArrayList<>(); sexList.add("男"); sexList.add("女"); QueryWrapper<UserBean> wrapper = new QueryWrapper<>(); wrapper.in("sex", sexList); // 等价 SQL 语句:sex not in("男", "女")
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; @RunWith(SpringRunner.class) @SpringBootTest class Condition9Test { @Autowired private SimpleMapper simpleMapper; @Test void contextLoads() { QueryWrapper<UserBean> wrapper = new QueryWrapper<>(); wrapper.in("user_id", 1, 3, 5, 9); List<UserBean> userBeanList = simpleMapper.selectList(wrapper); for(UserBean userBean : userBeanList) { System.out.println(userBean); } wrapper = new QueryWrapper<>(); wrapper.notIn("sex", "男", "女"); userBeanList = simpleMapper.selectList(wrapper); for(UserBean userBean : userBeanList) { System.out.println(userBean); } } }
运行上面代码,实际上将执行下面 SQL 语句:
Preparing: SELECT user_id,name,sex,age,face,salary,borthday FROM user WHERE (user_id IN (?,?,?,?)) Parameters: 1(Integer), 3(Integer), 5(Integer), 9(Integer) Preparing: SELECT user_id,name,sex,age,face,salary,borthday FROM user WHERE (sex NOT IN (?,?)) Parameters: 男(String), 女(String)