您现在的位置是:首页 >
当前栏目
SimpleQuery优化
优化
2023-06-13 09:11:17 时间
今天又给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)
获取到id
为1L
对应的表数据中name
字段的值,非常便利
但是如果是之前的版本,则会抛出NullPointerException
(下方简称NPE
)
原因是因为默认使用Collectors#toMap
这个函数
它调用的是HashMap#merge
其中判断了如果value
为空,则抛出NPE
而此处我期望的数据,它是允许name
为null
的
因此我进行了一点小修改:
然后再次执行,成功得到我们期望的值
还有一处修改,也是相同的道理,我期望得到如下结果:
这里获取到的map
,key
为表中的name
,value
则是对应key
中name
相同的数据组成的集合
为了方便测试,我再新增了一条数据:
// 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)
去顺带获取name
为null
的数据,最起码,个别name
为null
的数据不能影响我取其他的值,说白了就是你别给我抛出NPE
…
所以我又施展了一点小修改:
测试成功通过!
相关文章
- 【GCC编译优化系列】一文带你了解C代码到底是如何被编译的(RT-Thread技术论坛优秀文章)
- while循环导致的CPU暴涨问题优化实践
- Oracle 等待事件 enq: OW – initialization 官方解释,作用,如何使用及优化方法
- MySQL数据库设计优化:提升性能与效率(mysql数据库设计优化)
- 优化Linux优化:提高系统性能的利器(linux系统任务)
- Linux系统内存申请的管理与优化(linux内存申请)
- Linux线程切换:优化最短响应时间(linux线程切换时间)
- MySQL 中文检索优化技巧学习(mysql中文检索)
- MySQL格式修改:优化数据的方法(mysql修改格式)
- 如何优化 MySQL 查询时间(mysql 一次查询时间)
- 技术提升查询性能利用 Oracle 索引技术优化查询效率(oracle中运用索引)
- Oracle为字段构建索引优化数据性能的必要步骤(oracle为字段加索引)
- uteOracle Sql语句优化技巧突破性能瓶颈(oracle exc)
- Oracle存储过程的编写经验与优化措施(分享)