前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SimpleQuery优化

SimpleQuery优化

作者头像
阿超
发布2022-08-21 10:56:03
1820
发布2022-08-21 10:56:03
举报
文章被收录于专栏:快乐阿超快乐阿超

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

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

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

之前的情况:

假设数据库中表数据:

id

name

1

ruben

2

null

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

代码语言:javascript
复制
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进行查询

代码语言:javascript
复制
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相同的数据组成的集合

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

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

开始查询:

代码语言:javascript
复制
Map<String, List<Entity>> nameUsersMap = SimpleQuery.group(Wrappers.lambdaQuery(), Entity::getName);

期望结果如下:

输入图片说明
输入图片说明

实际还是抛出了NPE

输入图片说明
输入图片说明

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

输入图片说明
输入图片说明
输入图片说明
输入图片说明

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

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

输入图片说明
输入图片说明

测试成功通过!

输入图片说明
输入图片说明
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-25,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档