SimpleQuery优化

简介: SimpleQuery优化

做老实人,说老实话,干老实事,就是实事求是。——邓小平

今天又给Mybatis-Plus贡献了代码

https://gitee.com/baomidou/mybatis-plus/pulls/198

优化SimpleQuery,处理了值为空的情况:

之前的情况:

假设数据库中表数据:

id name
1 ruben
2 null

我们构建一个Enitity(向miemie大佬致敬)

package com.baomidou.mybatisplus.test.rewrite;
import lombok.Data;
import java.io.Serializable;
/**
 * @author miemie
 * @since 2020-06-23
 */
@Data
public class Entity implements Serializable {
    private static final long serialVersionUID = 6962439201546719734L;
    private Long id;
    private String name;
}

使用SimplerQuery进行查询

Map<Long, String> idNameMap = SimpleQuery.map(Wrappers.lambdaQuery(), Entity::getId, Entity::getName);

期望的数据格式如下:

这样我就可以通过idNameMap.get(1L)获取到id1L对应的表数据中name字段的值,非常便利

但是如果是之前的版本,则会抛出NullPointerException(下方简称NPE)

原因是因为默认使用Collectors#toMap这个函数

它调用的是HashMap#merge

其中判断了如果value为空,则抛出NPE

而此处我期望的数据,它是允许namenull

因此我进行了一点小修改:

然后再次执行,成功得到我们期望的值

还有一处修改,也是相同的道理,我期望得到如下结果:

这里获取到的mapkey为表中的namevalue则是对应keyname相同的数据组成的集合

为了方便测试,我再新增了一条数据:

// SqlHelper#getMapper是根据`entity`获取对应`mapper`的方法
BaseMapper<Entity> mapper = SqlHelper.getMapper(Entity.class);
Entity entity = new Entity();
entity.setId(3L);
entity.setName("ruben");
mapper.insert(entity);

开始查询:

Map<String, List<Entity>> nameUsersMap = SimpleQuery.group(Wrappers.lambdaQuery(), Entity::getName);

期望结果如下:

实际还是抛出了NPE

这是因为原来使用的Collectors#groupingBy,它也对key进行了判空处理,实际上我们并不想丢掉这些数据

因为可以根据nameUsersMap.get(null)去顺带获取namenull的数据,最起码,个别namenull的数据不能影响我取其他的值,说白了就是你别给我抛出NPE

所以我又施展了一点小修改:

测试成功通过!

相关文章
|
监控 druid
druid 连接池监控报错 Sorry, you are not permitted to view this page.
druid 连接池监控报错 Sorry, you are not permitted to view this page.
2400 0
|
XML jenkins Java
必知的技术知识:Jenkins插件开发
必知的技术知识:Jenkins插件开发
401 0
|
数据库
SVN ERROR(E120106、E155009、E000122)|4-11
SVN ERROR(E120106、E155009、E000122)|4-11
|
存储 监控 算法
强密码策略 防止暴力破解
【8月更文挑战第14天】
994 2
|
easyexcel Java 关系型数据库
阿里巴巴-EasyExcel 基于Java的简单、省内存的读写Excel
该文章主要介绍了在Java应用中如何使用EasyExcel技术完成对Excel文件的导入和导出操作,包括环境搭建、基本概念、快速入门、进阶操作和综合应用等内容,并提供了相关代码示例和注意事项。
 阿里巴巴-EasyExcel 基于Java的简单、省内存的读写Excel
|
SQL 算法 关系型数据库
MySQL Online DDL详解:从历史演进到原理及使用
MySQL Online DDL详解:从历史演进到原理及使用
|
XML Java 数据格式
最新52道 Spring 面试题汇总
拿来吧你!最新Spring面试题汇总
622 0
|
Kubernetes 网络协议 API
kubernetes资源命名约束和最佳实践
kubernetes资源命名约束和最佳实践
|
Kubernetes Java Devops
详解SpringBoot(2.3)应用制作Docker镜像(官方方案)
学习SpringBoot官方镜像方案的细节
755 0
详解SpringBoot(2.3)应用制作Docker镜像(官方方案)
下一篇
开通oss服务