Mybatis-Plus条件构造器的具体使用方法

 更新时间:2020年08月26日 10:38:49   作者:ME_邱康  
这篇文章主要介绍了Mybatis-Plus条件构造器的具体使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在Mybatis-Plus中,Wrapper接口的实现类关系如下:


可以看到,AbstractWrapper和AbstractChainWrapper是重点实现,接下来我们重点看下AbstractWrapper以及其子类。

说明:QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper) 的父类 用于生成 sql的 where 条件, entity 属性也用于生成 sql 的 where 条件

注意:entity 生成的 where 条件与使用各个 api 生成的 where 条件 没有任何关联行为

文档地址:https://mybatis.plus/guide/wrapper.html

allEq

说明

  • allEq(Map<R, V> params)
  • allEq(Map<R, V> params, boolean null2IsNull)
  • allEq(boolean condition, Map<R, V> params, boolean null2IsNull)

全部eq(或个别isNull)

个别参数说明: params : key 为数据库字段名, value 为字段值 null2IsNull : 为 true 则在 map 的 value 为

null 时调用 isNull 方法,为 false 时则忽略 value 为 null 的
例1: allEq({id:1,name:“老王”,age:null}) —> id = 1 and name = ‘老王' and age is null
例2: allEq({id:1,name:“老王”,age:null}, false) —> id = 1 and name = ‘老王'

  • 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)

个别参数说明: filter : 过滤函数,是否允许字段传入比对条件中 params 与 null2IsNull : 同上
例1: allEq((k,v) -> k.indexOf(“a”) > 0, {id:1,name:“老王”,age:null}) —> name = ‘老王' and age is null
例2: allEq((k,v) -> k.indexOf(“a”) > 0, {id:1,name:“老王”,age:null}, false) —> name = ‘老王'

测试用例

@Test
public void testAllEq() {
	// 设置条件
	Map<String, Object> params = new HashMap<>();
	params.put("name", "李四");
	params.put("age", "20");
	params.put("password", null);

	QueryWrapper<User> wrapper = new QueryWrapper<>();
	// SELECT id,user_name,name,age,email AS mail FROM tb_user WHERE password IS NULL AND name = ? AND age = ?
	// wrapper.allEq(params);

	// SELECT id,user_name,name,age,email AS mail FROM tb_user WHERE name = ? AND age = ?
	// wrapper.allEq(params, false);

	// SELECT id,user_name,name,age,email AS mail FROM tb_user WHERE age = ?
	// wrapper.allEq((k, v) -> (k.equals("age") || k.equals("id")), params);

	// SELECT id,user_name,name,age,email AS mail FROM tb_user WHERE name = ? AND age = ?
	wrapper.allEq((k, v) -> (k.equals("age") || k.equals("id") || k.equals("name")), params);

	List<User> users = this.userMapper.selectList(wrapper);
	for (User user : users) {
		System.out.println(user);
	}
}

基本比较操作

  • eq:等于 =
  • ne:不等于 <>
  • gt:大于 >
  • ge:大于等于 >=
  • lt:小于 <
  • le:小于等于 <=
  • between:BETWEEN 值1 AND 值2
  • notBetween:NOT BETWEEN 值1 AND 值2
  • in:字段 IN (value.get(0), value.get(1), …)
  • notIn:字段 NOT IN (v0, v1, …)

测试用例

@Test
public void testEq() {
	QueryWrapper<User> wrapper = new QueryWrapper<>();

	// SELECT id,user_name,name,age,email AS mail FROM tb_user WHERE password = ? AND age >= ? AND name IN (?,?,?)
	wrapper.eq("password", "123456").ge("age", 20).in("name", "李四", "王五", "赵六");

	List<User> users = this.userMapper.selectList(wrapper);
	for (User user : users) {
		System.out.println(user);
	}
}

模糊查询like:LIKE ‘%值%'

例: like(“name”, “王”) —> name like ‘%王%'notLike:NOT LIKE ‘%值%'
例: notLike(“name”, “王”) —> name not like ‘%王%'likeLeft:LIKE ‘%值'
例: likeLeft(“name”, “王”) —> name like ‘%王'likeRight:LIKE ‘值%'
例: likeRight(“name”, “王”) —> name like ‘王%'

测试用例

@Test
public void testLike() {
	QueryWrapper<User> wrapper = new QueryWrapper<>();
	// SELECT id,user_name,name,age,email AS mail FROM tb_user WHERE name LIKE ?
	// 参数:%五(String)
	wrapper.likeLeft("name", "五");

	List<User> users = this.userMapper.selectList(wrapper);
	for (User user : users) {
		System.out.println(user);
	}
}

排序

orderBy
排序:ORDER BY 字段, …
例: orderBy(true, true, “id”, “name”) —> order by id ASC,name ASC

orderByAsc
排序:ORDER BY 字段, … ASC
例: orderByAsc(“id”, “name”) —> order by id ASC,name ASC

orderByDesc
排序:ORDER BY 字段, … DESC
例: orderByDesc(“id”, “name”) —> order by id DESC,name DESC

测试用例

@Test
public void testOrderByAgeDesc() {
	QueryWrapper<User> wrapper = new QueryWrapper<>();
	// 按照年龄倒序排序
	// SELECT id,user_name,name,age,email AS mail FROM tb_user ORDER BY age DESC
	wrapper.orderByDesc("age");

	List<User> users = this.userMapper.selectList(wrapper);
	for (User user : users) {
		System.out.println(user);
	}
}

逻辑查询

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

and
AND 嵌套
例: and(i -> i.eq(“name”, “李白”).ne(“status”, “活着”)) —> and (name = ‘李白' and status<> ‘活着')

测试用例

@Test
public void testOr() {
	QueryWrapper<User> wrapper = new QueryWrapper<>();
	// SELECT id,user_name,name,age,email AS mail FROM tb_user WHERE name = ? OR age = ?
	wrapper.eq("name", "王五").or().eq("age", 21);

	List<User> users = this.userMapper.selectList(wrapper);
	for (User user : users) {
		System.out.println(user);
	}
}

select

在Mybatis-Plus查询中,默认查询所有的字段,如果有需要也可以通过select方法进行指定字段。

@Test
public void testSelect() {
	QueryWrapper<User> wrapper = new QueryWrapper<>();
	// SELECT id,name,age FROM tb_user WHERE name = ? OR age = ?
	wrapper.eq("name", "王五").or().eq("age", 21).select("id", "name", "age"); // 指定查询的字段

	List<User> users = this.userMapper.selectList(wrapper);
	for (User user : users) {
		System.out.println(user);
	}
}

查询方式 说明
setSqlSelect 设置 SELECT 查询字段
where WHERE 语句,拼接 + WHERE 条件
and AND 语句,拼接 + AND 字段=值
andNew AND 语句,拼接 + AND (字段=值)
or OR 语句,拼接 + OR 字段=值
orNew OR 语句,拼接 + OR (字段=值)
eq 等于=
allEq 基于 map 内容等于=
ne 不等于<>
gt 大于>
ge 大于等于>=
lt 小于<
le 小于等于<=
like 模糊查询 LIKE
notLike 模糊查询 NOT LIKE
in IN 查询
notIn NOT IN 查询
isNull NULL 值查询
isNotNull IS NOT NULL
groupBy 分组 GROUP BY
having HAVING 关键词
orderBy 排序 ORDER BY
orderAsc ASC 排序 ORDER BY
orderDesc DESC 排序 ORDER BY
exists EXISTS 条件语句
notExists NOT EXISTS 条件语句
between BETWEEN 条件语句
notBetween NOT BETWEEN 条件语句
addFilter 自由拼接 SQL
last 拼接在最后,例如:last(“LIMIT 1”)

到此这篇关于Mybatis-Plus条件构造器的具体使用方法的文章就介绍到这了,更多相关Mybatis-Plus条件构造器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • redis与ssm整合方法(mybatis二级缓存)

    redis与ssm整合方法(mybatis二级缓存)

    本文给大家介绍redis与ssm整合方法(mybatis二级缓存)。主要是利用redis去做mybatis的二级缓存,mybaits映射文件中所有的select都会刷新已有缓存,如果不存在就会新建缓存,所有的insert,update操作都会更新缓存
    2017-12-12
  • Java:泛型知识知多少

    Java:泛型知识知多少

    这篇文章主要介绍了java泛型基础知识及通用方法,从以下几个方面介绍一下java的泛型: 基础, 泛型关键字, 泛型方法, 泛型类和接口,感兴趣的可以了解一下
    2021-08-08
  • Java中的Spring 如何处理循环依赖

    Java中的Spring 如何处理循环依赖

    这篇文章主要介绍了Java中的Spring 如何处理循环依赖,依赖指的是Bean与Bean之间的依赖关系,循环依赖指的是两个或者多个Bean相互依赖,关于更多Spring 处理循环依赖的详情,需要的朋友可以参考下面文章具体内容
    2022-05-05
  • Java CAS与Atomic原子操作核心原理详解

    Java CAS与Atomic原子操作核心原理详解

    CAS(Compare and Swap)和Atomic原子操作是保证多线程并发安全的常用机制,能够高效地实现对共享变量的安全访问和修改,避免线程竞争导致的数据不一致和死锁等问题。它们的应用可以提高程序的并发性能和可维护性,是多线程编程中的重要工具
    2023-04-04
  • java通过ip获取客户端Mac地址的小例子

    java通过ip获取客户端Mac地址的小例子

    java通过ip获取客户端Mac地址的小例子,需要的朋友可以参考一下
    2013-03-03
  • Java删除String中指定字符的11种方法汇总

    Java删除String中指定字符的11种方法汇总

    这篇文章主要给大家介绍了关于Java删除String中指定字符的11种方法,在Java中String类提供了许多方法来处理字符串,其中包括删除指定字符的方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • Java中的Unsafe在安全领域的使用总结和复现(实例详解)

    Java中的Unsafe在安全领域的使用总结和复现(实例详解)

    unsafe里面有很多好用的方法,比如allocateInstance可以直接创建实例对象,defineAnonymousClass可以创建一个VM匿名类(VM Anonymous Class),以及直接从内存级别修改对象的值。这篇文章主要介绍了Java中的Unsafe在安全领域的一些应用总结和复现,需要的朋友可以参考下
    2022-03-03
  • Java线程池用法实战案例分析

    Java线程池用法实战案例分析

    这篇文章主要介绍了Java线程池用法,结合具体案例形式分析了java线程池创建、使用、终止等相关操作技巧与使用注意事项,需要的朋友可以参考下
    2019-10-10
  • Springboot实现公共字段填充的示例详解

    Springboot实现公共字段填充的示例详解

    这篇文章主要为大家详细介绍了Springboot实现公共字段填充的相关知识,文中的示例代码讲解详细,对我们深入学习springboot有一定的帮助,感兴趣的小伙伴可以了解下
    2023-10-10
  • hibernate存取json数据的代码分析

    hibernate存取json数据的代码分析

    这篇文章主要介绍了hibernate存取json数据的代码分析,需要的朋友可以参考下
    2017-09-09

最新评论