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

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

测试成功通过!

相关文章
|
监控 物联网 云计算
优化服务配置:提升效率与用户体验的关键
随着科技的迅猛发展,服务配置已经成为企业和个人生活中不可或缺的一部分。无论是云计算、移动应用、还是物联网设备,都需要良好的服务配置来确保顺畅的运行和卓越的用户体验。本文将探讨服务配置的重要性,以及如何优化配置以提高效率和用户满意度。
|
3月前
|
测试技术
优化if-else的11种方案
优雅编码不仅提升程序效率,也增进代码可读性与维护性。通过早返回减少嵌套逻辑、运用三元运算符简化条件判断、采用`switch-case`优化多分支结构、实施策略模式灵活应对不同情境、利用查找表快速定位处理方式、封装函数明确职责划分、应用命令模式解耦操作与调用、引入状态模式管理复杂状态变化、重构条件表达式以增强清晰度、运用断言确保前提条件、及合理异常处理等十大技巧,使代码更加精炼与优雅。
67 4
优化if-else的11种方案
|
4月前
|
数据采集 存储 编译器
优化计算效率
【7月更文挑战第26天】优化计算效率
76 8
|
6月前
|
缓存 算法 测试技术
优化 C#编程性能的策略
【4月更文挑战第20天】优化C#性能策略包括:选择合适算法和数据结构,避免频繁对象创建,缓存常用数据,减少内存分配,使用异步编程,优化数据库操作(如合理查询和使用索引),利用多线程并行处理,精简代码,使用性能分析工具,硬件升级,以及进行性能测试。综合应用这些策略可提升程序性能和响应性。
65 4
|
存储 缓存 JavaScript
优化SPA性能的方法
Web开发中,随着JavaScript的发展,越来越多的网站开始采用单页面应用程序(SPA)的方式来呈现内容。SPA相对于传统的多页面应用程序来说,具有更好的用户体验和更快的加载速度。但是,随着SPA的流行,页面越来越复杂,也面临着越来越多的性能问题。在这篇文章中,我们将讨论一些优化SPA性能的方法。
244 0
|
SQL 缓存 测试技术
预告片优化方案
 看了一下代码,同时在线上做了观察压测。个人总结这个接口问题在于太过于依赖缓存,根本不会走DB。依赖缓存造成了依赖缓存的数据结构。首先要从缓存中取出一堆数据。而且要走两次,一次取正片的信息,一次取专辑内所有视频的信息。取出来的信息在CPU里计算筛选,排序。本身缓存取数据就比较快,再加上计算量大。其实我们并发量最大的api接口们都是采用这个模式设计的。调用的多了,我觉得我真是压测的狠的话,会造成CPU密集。其实现在的缓存之类的都可以持久化了,完全可以当数据库用。但是关系型数据作为一个长久的经典还有一个很重要的原因:保持一个IO和CPU使用的平衡。
预告片优化方案
卡常优化
为卡常而生的三个函数 封装的快读
185 0
|
缓存 前端开发 JavaScript
怎么对网站进行性能方面的优化
1、尽可能减少HTTP请求:图片合并 (css sprites),Js脚本文件合并、css文件合并2、减少DNS查询DNS查询服务指域名查找,指将请求的域名转化为对应的IP地址,就如姓名和门牌号的关系。
1223 0