背景
单表查询中,由于字段较多,且有一些大字段(富文本啥的)导致查询接口速度会有影响,所以采用select方法指定查询的字段,但是当符合条件时,如果想要的字段为null,则此时依旧会查询一条记录,集合size=1,但是会提示“All elements are null”,此时又因为跳过了集合的非空判断,导致一些取值操作会报空指针异常。
例子
...
LambdaQueryWrapper<User> query = new LambdaQueryWrapper<>();
query.select(User::getName).eq(User::getId,id);
List<User> users = this.userService.list(query);
if(CollectionUtil.isNotEmpty(users)){
String name = users.get(0).getName();
}
...
调整方法
(1)多加一步集合内第一个元素判空操作。
if(CollectionUtil.isNotEmpty(users) && null != users.get(0)){
String name = users.get(0).getName();
}
(2)或者采用去除不需要字段的形式,而非只查需要需要的字段,这样就能避免只查需要字段为空导致整个集合内容为空造成的错误。
query.select(User.class,i -> !i.getLongTest().equals("long_test")).eq(User::getId,id);
(3)用传统的查询方式去查,要什么查什么不用mybatis plus条件构造器