MyBatis Plus(五)

条件构造器

  1. 在 IService 中提供了一个 query 方法,该方法返回 QueryChainWrapper 对象实现链式查询,避免每次都创建 QueryWrapper 对象
// 链式查询 普通
QueryChainWrapper<T> query();
  1. QueryChainWrapper 对象提供的方法和 QueryWrapper 方法基本一样,其中下面几个用于获取记录
// 应用查询条件,返回一个结果列表
// 例如:userService.query().eq("sex", "男").gt("salary", 7000).lt("age", 30).list();
public List<T> list()
// 应用查询条件,返回一个结果
// 例如:userService.query().eq("user_id", 100).one();
public T one()
// 应用查询条件,返回数据记录数
// 例如:userService.query().eq("sex", "男").gt("salary", 7000).lt("age", 30).one();
public Integer count()
  1. 采用链式查询,查找性别为“男”,薪水大于 7000,年龄小于 30 的用户列表
@Test
    void contextLoads() {
    
    
        List<UserBean> userBeanList = userService.query()
                .eq("sex", "男")
                .gt("salary", 7000)
                .lt("age", 30).list();
        for(UserBean userBean : userBeanList) {
    
    
            System.out.println(userBean);
        }
    }

allEq 条件

  1. allEq 方法把参数 Map 中的参数使用 and 进行连接
  2. 传递如下 Map 参数给 allEq 方法:
Map<String,Object> params = new HashMap<>();
params.put("age", 40);
params.put("sex", "男");
  1. allEq 方法组成如下 SQL 语句
age=50 and sex='男'
  1. allEq 方法定义
allEq(Map<R, V> params)
allEq(Map<R, V> params, boolean null2IsNull)
allEq(boolean condition, Map<R, V> params, boolean null2IsNull)
allEq(BiPredicate<R, V> filter, Map<R, V> params)
allEq(BiPredicate<R, V> filter, Map<R, V> params, boolean null2IsNull)
allEq(boolean condition, BiPredicate<R, V> filter, Map<R, V> params, boolean null2IsNull)
  1. 参数说明
    1. params:查询条件,key 为数据库字段名,value 为字段值
    2. null2IsNull:指定当 params 条件的 value 为 null 时,是否转换成 SQL 的 is null。如果为 true 则在 map 的 value为 null 时,调用 isNull 方法。为 false 时则忽略 value 为 null 的条件。例如:
// 示例1:
Map<String,Object> params = new HashMap<>();
params.put("age", null);
params.put("sex", "男");
allEq(params )
// 对应的 SQL 语句
sex = '男' and age is null
 
// 示例2:
Map<String,Object> params = new HashMap<>();
params.put("age", null);
params.put("sex", "男");
allEq(params , false)
// 对应的 SQL 语句,忽略了 value 等于 null 的条件
sex = '男'
  1. filter:过滤函数,判断是否允许某个字段传入此对条件中
Map<String,Object> map = new HashMap<>();
map.put("sex", "男");
map.put("age", null);
 
QueryWrapper<UserBean> wrapper = new QueryWrapper<>();
wrapper.allEq(new BiPredicate<String,Object>(){
    
    
    @Override
    public boolean test(String s, Object o) {
    
    
        System.out.println(s + "=>" + o);
        // 过滤条件值为 null 的条件
        // 如果条件的值为 null,则不参与过滤
        return null != o;
    }
}, map);
List<UserBean> userBeanList = simpleMapper.selectList(wrapper);
  1. condition:使用这个条件可以构建动态SQL条件,而不需要使用 if-else。如果当 condition 为 true,则将 allEq 方法中的可用条件添加到 SQL 条件中。如果为 false,则所有 allEq 条件均不添加到 SQL 条件中
QueryWrapper<UserBean> wrapper = new QueryWrapper<>();
wrapper.gt("salary", 7000); // 用户薪水大于7000
 
UserBean userBean = getUserBeanById(100);
Map<String,Object> params = new HashMap<>();
if(null != userBean) {
    
    
    params.put("age", userBean.getAge());
    params.put("sex", userBean.getSex());
}
wrapper.allEq(null != userBean, params , true); // 如果 userBean 为 null,则应用 params 条件

eq 和 ne

  1. eq(等于)和 ne(不等于)判断条件
  2. eq(等于 =)
eq(R column, Object val)
eq(boolean condition, R column, Object val)

// 过滤 name 等于“张三”的用户信息
QueryWrapper<UserBean> wrapper = new QueryWrapper<>();
wrapper.eq("name", "张三"); // 等价 SQL 语句:name = '张三'
  1. ne(不等于 != 或 <>):查询 name 不等于“张三”的用户信息
QueryWrapper<UserBean> wrapper = new QueryWrapper<>();
wrapper.ne("name", "张三")// 等价的 SQL 语句:name <> '张三' 或 name != '张三'
  1. 参数说明:
    1. column:要用于条件筛选的数据库表列名称,如:name
    2. val:用于指定数据表列的值,条件将根据该值进行筛选
    3. condition:用于指定当前这个条件是否有效;如果为 true,则应用当前条件;如果为 false,则忽略当前条件。
  2. 运行下面程序,将执行如下 SQL 语句:参数为 30(Integer), 男(String)
@Test
    void contextLoads() {
    
    
        // 查询:age=30 and sex!='男'
        // 或者:age=30 and sex<>'男'
        QueryWrapper<UserBean> wrapper = new QueryWrapper<>();
        wrapper.eq("age", 30);
        wrapper.ne("sex", "男");
 
        List<UserBean> userBeanList = simpleMapper.selectList(wrapper);
        System.out.println("result size=" + userBeanList.size());
    }
执行如下 SQL 语句
SELECT user_id,name,sex,age,face,salary,borthday FROM user WHERE (age = ? AND sex <> ?)

gt、ge、lt 和 le

  1. gt(大于 >)
gt(R column, Object val)
gt(boolean condition, R column, Object val)

查询 age 大于 18QueryWrapper<UserBean> wrapper = new QueryWrapper<>();
wrapper.gt("age", 18); // 等价 SQL 语句:age > 18
  1. ge(大于等于 >=)
ge(R column, Object val)
ge(boolean condition, R column, Object val)

查询 age 大于等于 18QueryWrapper<UserBean> wrapper = new QueryWrapper<>();
wrapper.ge("age", 18); // 等价 SQL 语句:age >= 18
  1. lt(小于 <)
lt(R column, Object val)
lt(boolean condition, R column, Object val)

查询 age 小于 18QueryWrapper<UserBean> wrapper = new QueryWrapper<>();
wrapper.lt("age", 18); // 等价 SQL 语句:age < 18
  1. le(小于等于 <=)
le(R column, Object val)
le(boolean condition, R column, Object val)

查询 age 小于等于 18QueryWrapper<UserBean> wrapper = new QueryWrapper<>();
wrapper.le("age", 18); // 等价的 SQL 语句:age <= 18
  1. 参数说明
    1. column:要用于条件筛选的数据库表列名称,如:name
    2. val:用于指定数据表列的值,条件将根据该值进行筛选
    3. condition:用于指定当前这个条件是否有效;如果为 true,则应用当前条件;如果为 false,则忽略当前条件
 @Test
    void contextLoads() {
    
    
        QueryWrapper<UserBean> wrapper = new QueryWrapper<>();
        wrapper.gt("user_id", 100);
        wrapper.lt("user_id", 105);
        List<UserBean> userBeanList = simpleMapper.selectList(wrapper);
        for(UserBean userBean : userBeanList) {
    
    
            System.out.println(userBean);
        }
 
        wrapper = new QueryWrapper<>();
        wrapper.ge("user_id", 100);
        wrapper.le("user_id", 105);
        userBeanList = simpleMapper.selectList(wrapper);
        for(UserBean userBean : userBeanList) {
    
    
            System.out.println(userBean);
        }
    }

between 和 notBetween

  1. between(BETWEEN 值1 AND 值2)
between(R column, Object val1, Object val2)
between(boolean condition, R column, Object val1, Object val2)
  1. between 对应 SQL 语句中的 between 关键字
QueryWrapper<UserBean> wrapper = new QueryWrapper<>();
wrapper.between("age", 18, 30); // 等价于 SQL 语句:age between 18 and 30
  1. notBetween(NOT BETWEEN 值1 AND 值2)
notBetween(R column, Object val1, Object val2)
notBetween(boolean condition, R column, Object val1, Object val2)
  1. between 对应 SQL 语句中的 not between 关键字
QueryWrapper<UserBean> wrapper = new QueryWrapper<>();
wrapper.notBetween("age", 18, 30); // 等价于 SQL 语句:age not between 18 and 30
  1. 参数说明
    1. column:要用于条件筛选的数据库表列名称,如:name
    2. val1:用于指定数据表列的值,条件将根据该值进行筛选
    3. val2:用于指定数据表列的值,条件将根据该值进行筛选
    4. condition:用于指定当前这个条件是否有效;如果为 true,则应用当前条件;如果为 false,则忽略当前条件
 @Test
    void contextLoads() {
    
    
        QueryWrapper<UserBean> wrapper = new QueryWrapper<>();
        wrapper.between("user_id", 100, 105);
        List<UserBean> userBeanList = simpleMapper.selectList(wrapper);
        for(UserBean userBean : userBeanList) {
    
    
            System.out.println(userBean);
        }

        wrapper = new QueryWrapper<>();
        wrapper.notBetween("age", 21, 90);
        userBeanList = simpleMapper.selectList(wrapper);
        for(UserBean userBean : userBeanList) {
    
    
            System.out.println(userBean);
        }
    }
 

like模糊查询

  1. like(完全模糊,即“like ‘%val%’”)
like(R column, Object val)
like(boolean condition, R column, Object val)
  1. 参数说明
    1. like(R column, Object val)
      like(boolean condition, R column, Object val)
    2. val:用于指定数据表列的值,条件将根据该值进行筛选
    3. val:用于指定数据表列的值,条件将根据该值进行筛选
  2. 查询用户名称中包含“王”值的用户信息,如下
QueryWrapper<UserBean> wrapper = new QueryWrapper<>();
wrapper.like("name", "王"); // 等价 SQL 语句:name like '%王%'

notLike(完全模糊取非,即“not like ‘%val%’”)

likeLeft(R column, Object val)
likeLeft(boolean condition, R column, Object val)
  1. 参数说明
    1. column:要用于条件筛选的数据库表列名称,如:name、
    2. val:用于指定数据表列的值,条件将根据该值进行筛选
    3. condition:用于指定当前这个条件是否有效;如果为 true,则应用当前条件;如果为 false,则忽略当前条件
  2. 查询用户名以“王”值结束的用户信息列表
QueryWrapper<UserBean> wrapper = new QueryWrapper<>();
wrapper.likeLeft("name", "王"); // 等价 SQL 语句:name like '%王'

likeRight(仅右边模糊,即“like ‘val%’”)

likeRight(R column, Object val)
wrapper.likeRight(boolean condition, R column, Object val)
  1. 参数说明:
    1. column:要用于条件筛选的数据库表列名称,如:name
    2. val:用于指定数据表列的值,条件将根据该值进行筛选
    3. condition:用于指定当前这个条件是否有效;如果为 true,则应用当前条件;如果为 false,则忽略当前条件
  2. 查询用户名以“王”值开始的用户信息列表
QueryWrapper<UserBean> wrapper = new QueryWrapper<>();
likeRight("name", "王"); // 等价 SQL 语句:name like '王%'

样例总结

@Test
    void contextLoads() {
    
    

        QueryWrapper<UserBean> wrapper = new QueryWrapper<>();
        wrapper.like("name", "佳");
        List<UserBean> userBeanList = simpleMapper.selectList(wrapper);
        for(UserBean userBean : userBeanList) {
    
    
            System.out.println(userBean);
        }
 
        wrapper = new QueryWrapper<>();
        wrapper.notLike("name", "佳");
        userBeanList = simpleMapper.selectList(wrapper);
        System.out.println("result size=" + userBeanList.size());
        for(int i = 0; i < (userBeanList.size() > 10 ? 10 : userBeanList.size()); i++) {
    
    
            System.out.println(userBeanList.get(i));
        }
 
        
        wrapper = new QueryWrapper<>();
        wrapper.likeRight("name", "黄");
        userBeanList = simpleMapper.selectList(wrapper);
        for(UserBean userBean : userBeanList) {
    
    
            System.out.println(userBean);
        }
 
        wrapper = new QueryWrapper<>();
        wrapper.likeLeft("name", "佳");
        userBeanList = simpleMapper.selectList(wrapper);
        for(UserBean userBean : userBeanList) {
    
    
            System.out.println(userBean);
        }
    }

isNull 和 isNotNull

isNull 和 isNotNull

isNull(R column)
isNull(boolean condition, R column)
  1. 参数说明
    1. column:字段名
    2. condition:用于指定当前这个条件是否有效;如果为 true,则应用当前条件;如果为 false,则忽略当前条件

isNotNull(字段 IS NOT NULL)

isNotNull(R column)
isNotNull(boolean condition, R column)
  1. 参数说明
    1. column:字段名
    2. condition:用于指定当前这个条件是否有效;如果为 true,则应用当前条件;如果为 false,则忽略当前条件。
  2. 构造 name 为空,或者 name 不为空的查询条件
QueryWrapper<UserBean> wrapper = new QueryWrapper<>();
wrapper.isNull("name"); // 等价 SQL 语句:name is null
 
QueryWrapper<UserBean> wrapper = new QueryWrapper<>();
wrapper.isNotNull("name"); // 等价 SQL 语句:name is not null

样例代码

@Test
    void contextLoads() {
    
    
        QueryWrapper<UserBean> wrapper = new QueryWrapper<>();
        wrapper.isNull("sex");
        List<UserBean> userBeanList = simpleMapper.selectList(wrapper);
        for(UserBean userBean : userBeanList) {
    
    
            System.out.println(userBean);
        }
 
        wrapper = new QueryWrapper<>();
        wrapper.isNotNull("face");
        userBeanList = simpleMapper.selectList(wrapper);
        for(UserBean userBean : userBeanList) {
    
    
            System.out.println(userBean);
        }
    }

in 和 notIn

in(对应SQL中的 in 操作符)

in(R column, Collection<?> value)
in(boolean condition, R column, Collection<?> value)
in(R column, Object... values)
in(boolean condition, R column, Object... values)
  1. 参数
    1. column:列名称
    2. value:要查询的目标值列表,如:ID列表
    3. values:要查询的目标值数组,如:[1,2,3,5]
    4. condition:用于指定当前这个条件是否有效;如果为 true,则应用当前条件;如果为 false,则忽略当前条件。
  2. 查询 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(对应SQL中的 not in 操作符

notIn(R column, Collection<?> value)
notIn(boolean condition, R column, Collection<?> value)
notIn(R column, Object... values)
notIn(boolean condition, R column, Object... values)
  1. 参数说明
    1. column:列名称
    2. value:要查询的目标值列表,如:ID列表
    3. values:要查询的目标值数组,如:[1,2,3,5]
    4. condition:用于指定当前这个条件是否有效;如果为 true,则应用当前条件;如果为 false,则忽略当前条件
  2. 查询所有性别不是“男”或“女”的用户列表
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("男", "女")

样例代码

@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);
        }
    }

猜你喜欢

转载自blog.csdn.net/qq_43408367/article/details/121411790