mybatis-plus条件构造器报错了,我觉得怪怪的,是我想多了

44 阅读2分钟

水一篇,记录一下一个小问题。 今天在写代码的时候,原本的一个使用条件构造器的查询方法,在我加了一个条件后,开始报空指针异常了。 当然,这个异常大家都是老熟人了,那么我来上菜

//获取用户信息  
User user = user.getByAccount(userAccount);  
//获取角色  
LambdaQueryWrapper<Role> queryWrapper = new LambdaQueryWrapper<>();  
queryWrapper.eq(StrUtil.isNotBlank(Role.getType()), Role::getType, type)  
            // 我新增加的条件查询
            .in(CollectionUtils.isNotEmpty(ids), Role::getId, ids) 
            // 原始报错代码
            .queryWrapper.eq(user != null && user.getId()! = null,
            Role::getUserId, user.getId());  
return baseMapper.selectList(queryWrapper);

以上代码是我仿照错误代码写的 相信有的小伙伴已经一眼发现问题了,我也相信有些小伙伴,觉得怪怪的,但是没直接发现。 我根据报错提示嘛,直接定位你到前面的那个condition,也就是user != null && user.getId()! = null, 这个写法看起来也有点怪的,是要处理null,但是有股子别扭味, 我经过断点,发现这个user肯定没值,因为这个account我肯定是没传的,所以我下意识的认为没什么问题。 重新执行一遍,肯定还是报错。 仔细观察。 恍然大悟,暗骂自己一声。 没发现问题的小伙伴看过来 当我的注意力被集中在前面的条件判断时,就忽略了基本问题。 这是一个方法,它的数据调用逻辑仍在当前方法里,所以你前面的条件虽然校验失败了,但是后面还会去执行获取对应的属性,最直观的

public void doSomething(Boolean flag , Long id){}

public void test(){
User user = null;
this.doSomething(user ! = null , user.getid);
}

相信小伙伴这下一眼看出了问题,还是被下意识的认知给欺骗了最真实的感受。 虽然前面判断空没问题,但是后面的get方法仍然在执行, 而且条件构造器前面的条件,也只是用于构造器里面的方法不执行,而不是当前后面部分代码不执行。 一个小注意点分享完毕。