前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >mp wrapper小技巧

mp wrapper小技巧

作者头像
阿超
发布于 2023-04-17 12:31:02
发布于 2023-04-17 12:31:02
25900
代码可运行
举报
文章被收录于专栏:快乐阿超快乐阿超
运行总次数:0
代码可运行

别让你的舌头超越你的思想。——第欧根尼

对于mpwrapper,直接使用nested+or是可以正确执行的

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Db.list(Wrappers.lambdaQuery(UserInfo.class).or().eq(UserInfo::getName, "Jon"));

生成

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2023-04-13 22:39:54.858 DEBUG 20668 --- [           main] o.d.s.s.p.m.m.UserInfoMapper.selectList  : ==>  Preparing: SELECT id,name,age,email,version,gmt_deleted FROM user_info WHERE gmt_deleted='2001-01-01 00:00:00' AND (name = ?)
2023-04-13 22:39:54.858 DEBUG 20668 --- [           main] o.d.s.s.p.m.m.UserInfoMapper.selectList  : ==> Parameters: Jon(String)

这样的技巧可以让我们在循环里拼接or时,无须考虑是否为第一个元素

例如stream-query中的封装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * or 查询
 *
 * @param wrapper 条件构造器
 * @param dataList 数据
 * @param biConsumer 逻辑处理
 * @param <W> 条件构造器
 * @param <T> 实体类型
 * @param <R> 数据类型
 * @return 条件构造器
 */
public static <W extends AbstractWrapper<T, ?, W>, T, R> W multiOr(
    W wrapper, Collection<R> dataList, BiConsumer<W, R> biConsumer) {
  if (Lists.isEmpty(dataList)) {
    return Database.notActive(wrapper);
  }
  return wrapper.nested(w -> dataList.forEach(data -> biConsumer.accept(w.or(), data)));
}

使用起来:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val dataList =
    Lists.of(
        new UserInfo() {
          {
            setName("Jon");
          }
        },
        new UserInfo() {
          {
            setEmail("test2@baomidou.com");
          }
        },
        new UserInfo() {
          {
            setName("Tom");
          }
        });
val wrapper =
    WrapperHelper.multiOr(
        Wrappers.lambdaQuery(UserInfo.class),
        dataList,
        (w, data) -> {
          w.eq(Objects.nonNull(data.getEmail()), UserInfo::getEmail, data.getEmail())
              .eq(StringUtils.isNotBlank(data.getName()), UserInfo::getName, data.getName());
        });
// ==>  Preparing: SELECT id,name,age,email,version,gmt_deleted FROM user_info WHERE
// gmt_deleted='2001-01-01 00:00:00' AND ((name = ? OR email = ? OR name = ?))
// ==> Parameters: Jon(String), test2@baomidou.com(String), Tom(String)
List<UserInfo> userInfos = Database.list(wrapper);
Assertions.assertEquals("Jon", userInfos.get(0).getName());
Assertions.assertEquals("test2@baomidou.com", userInfos.get(1).getEmail());
Assertions.assertEquals("Tom", userInfos.get(2).getName());
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
mp对象集合in查询
简单说明一下:此处是将入参的list获取到类型,根据表字段和list进行遍历,获取lambda进行取值,然后进行in以及or查询
阿超
2023/02/28
6450
mp对象集合in查询
编写mybatis脱敏插件
首先贴成品链接:https://gitee.com/zhijiantianya/ruoyi-vue-pro/pulls/275
阿超
2022/10/07
1K0
小书MybatisPlus第2篇-条件构造器的应用及总结
Mybatis Plus为我们提供了如下的一些条件构造器,我们可以利用它们实现查询条件、删除条件、更新条件的构造。
字母哥博客
2020/09/23
1.1K0
小书MybatisPlus第2篇-条件构造器的应用及总结
真香!​MyBatis-Plus 从入门到上手干事!
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射,而实际开发中,我们都会选择使用 MyBatisPlus,它是对 MyBatis 框架的进一步增强,能够极大地简化我们的持久层代码,下面就一起来看看 MyBatisPlus 中的一些奇淫巧技吧。
Guide哥
2021/05/20
6600
stream-query
弄了好几天,终于成功上传到maven中央仓库了 使用方式: <dependency> <groupId>io.github.vampireachao</groupId> <artifactId>stream-plugin-mybatis-plus</artifactId> <version>1.0.5</version> </dependency> <dependency> <groupId>io.github.vampireachao</groupId> <arti
阿超
2022/08/21
6910
三款神器,让生产力炸裂!一键生成,直接调用
后端程序员每天的搬砖日常,可以说CURD占据了绝大部分的工作;自然,数据库的CURD也就占据了很大一部分的工作时间,不是在配置xml,就是在写sql的路上,但这一切又都是一些技术含量不高的体力活;
一行Java
2022/04/07
1.6K0
三款神器,让生产力炸裂!一键生成,直接调用
mp自定义sql注入
以mysql语法INSERT INTO user_info (name,age,email) VALUES ( ?,?,? ),( ?,?,? )举例: 首先注入自定义策略 package io.gi
阿超
2022/08/21
2900
动态mapper优先级问题
https://gitee.com/VampireAchao/stream-query/issues/I6EJ27
阿超
2023/03/19
3860
MyBatis-Plus主要提供了哪些功能?
MyBatis-Plus是一个基于 MyBatis 的增强工具库,它简化了 MyBatis 在开发过程中的常见操作,提供了一些便捷的功能。以下是 MyBatis-Plus 主要提供的功能:
GeekLiHua
2025/01/21
970
​MyBatis-plus 从入门到入土
MyBatis-plus 是一款 Mybatis 增强工具,用于简化开发,提高效率。下文使用缩写 mp 来简化表示 MyBatis-plus,本文主要介绍 mp 搭配 Spring Boot 的使用。
Java旅途
2021/06/08
1.7K0
MyBatis-Plus条件构造器使用
条件构造器QueryWrapper常用方法 条件构造器QueryWrapper用于封装where语句。 /** *附加条件构造器QueryWrapper常用方法 ---这几个肯定够用了 */ wrapper.eq("数据库字段名", "条件值"); //相当于where条件 wrapper.between("数据库字段名", "区间一", "区间二");//相当于范围内使用的between wrapper.like("数据库字段名", "模糊查询的字符"); //模糊查
CODER-V
2023/03/04
1.3K0
simple-query
https://gitee.com/baomidou/mybatis-plus/pulls/194
阿超
2022/08/17
6500
肝九千字长文 | MyBatis-Plus 码之重器 lambda 表达式使用指南,开发效率瞬间提升80%
现在越来越流行基于 SpringBoot 开发 Web 应用,其中利用 Mybatis 作为数据库 CRUD 操作已成为主流。楼主以 MySQL 为例,总结了九大类使用 Mybatis 操作数据库 SQL 小技巧分享给大家。
猿芯
2021/05/27
2.6K0
肝九千字长文 | MyBatis-Plus 码之重器 lambda 表达式使用指南,开发效率瞬间提升80%
MyBatis Plus 项目的创建和使用
首先,创建一个 Spring Boot 工程,添加 MyBatis Plus 和 MySQL 对应的依赖,然后,和 MyBatis 一样,需要在 yml 文件中配置数据库连接信息
2的n次方
2024/11/26
1400
MyBatis Plus 项目的创建和使用
h2database
首先新建一个项目,勾选MP和H2 编写配置文件 # DataSource Config spring: datasource: driver-class-name: org.h2.Driver schema: classpath:db/schema-h2.sql data: classpath:db/data-h2.sql url: jdbc:h2:mem:test username: root password: test # Logger Con
阿超
2022/08/21
2550
h2database
MyBatis-Plus(实用篇)
创建MyMetaObjectHandler配置类,实现MetaObjectHandler接口
冬天vs不冷
2025/01/21
4320
MyBatis-Plus(实用篇)
【新晋开源项目】Stream-Query 加入 Dromara 开源社区
Stream-Query允许完全摆脱Mapper的Mybatis-Plus体验!可以使用类似“工具类”这样的静态函数进行数据库操作
阿超
2023/04/03
4270
【新晋开源项目】Stream-Query 加入 Dromara 开源社区
spring获取AliasFor增强的注解
此处是关于issue:https://gitee.com/dromara/stream-query/issues/I7BSNV
阿超
2023/06/23
2270
stream-query加入dromara开源组织
Stream-Query允许完全摆脱Mapper的Mybatis-Plus体验!可以使用类似“工具类”这样的静态函数进行数据库操作
阿超
2023/04/04
4220
stream-query加入dromara开源组织
Mybatis-Plus常用API教程,看这一篇就够了
注意:-- 真实开发中往往都会有这四个字段,version(乐观锁)、deleted(逻辑删除)、gmt_create(创建时间)、gmt_modified(修改时间)。
码神联盟
2021/11/10
9811
Mybatis-Plus常用API教程,看这一篇就够了
相关推荐
mp对象集合in查询
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档