java
2021-12-25
2021-12-25
做老实人,说老实话,干老实事,就是实事求是。——邓小平
今天又给Mybatis-Plus贡献了代码
https://gitee.com/baomidou/mybatis-plus/pulls/198
优化SimpleQuery,处理了值为空的情况:
之前的情况:
假设数据库中表数据:
| id | name |
|---|---|
| 1 | ruben |
| 2 | null |
我们构建一个Enitity(向miemie大佬致敬)
1 | |
使用SimplerQuery进行查询
1 | |
期望的数据格式如下:

这样我就可以通过idNameMap.get(1L)获取到id为1L对应的表数据中name字段的值,非常便利
但是如果是之前的版本,则会抛出NullPointerException(下方简称NPE)

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

它调用的是HashMap#merge

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

而此处我期望的数据,它是允许name为null的
因此我进行了一点小修改:


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

还有一处修改,也是相同的道理,我期望得到如下结果:
这里获取到的map,key为表中的name,value则是对应key中name相同的数据组成的集合
为了方便测试,我再新增了一条数据:
1 | |
开始查询:
1 | |
期望结果如下:

实际还是抛出了NPE:

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


因为可以根据nameUsersMap.get(null)去顺带获取name为null的数据,最起码,个别name为null的数据不能影响我取其他的值,说白了就是你别给我抛出NPE…
所以我又施展了一点小修改:

测试成功通过!
