mp wrapper小技巧

简介: mp wrapper小技巧

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

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

例如:

Db.list(Wrappers.lambdaQuery(UserInfo.class).or().eq(UserInfo::getName, "Jon"));

生成

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中的封装:

/**
 * 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)));
}


使用起来:

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());
相关文章
|
消息中间件 Java 网络架构
|
存储 网络协议 Java
本地MinIO存储服务如何创建Buckets并实现公网访问上传文件
本地MinIO存储服务如何创建Buckets并实现公网访问上传文件
2009 0
|
敏捷开发 安全 测试技术
阿里云云效产品使用合集之如何在甘特图视图中看到负责人信息
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
解决IDEA中 Could not autowire. No beans of 'xxxx' type found 的错误提示
解决IDEA中 Could not autowire. No beans of 'xxxx' type found 的错误提示
12594 3
解决IDEA中 Could not autowire. No beans of 'xxxx' type found 的错误提示
|
SQL 关系型数据库 MySQL
使用图形化界面工具DataGrip
使用图形化界面工具DataGrip
|
存储 安全 定位技术
公网IP和私有IP
公网IP和私有IP
560 2
|
前端开发 NoSQL Java
SpringBoot中application.properties的常用配置
SpringBoot中application.properties的常用配置