开发者

mybatisplus之Wrappers.ne踩坑记录解决

开发者 https://www.devze.com 2023-05-10 10:44 出处:网络 作者: data_too_long
目录一段看似平平无奇的代码报了异常将classroom是否为null单独拿出来判断一段看似平平无奇的代码
目录
  • 一段看似平平无奇的代码
  • 报了异常
  • 将classroom是否为null单独拿出来判断

一段看似平平无奇的代码

Classroom classroo编程客栈m = this.getOne(  
Wrappers.<Classroom>lambdaQuery()  
.select(Classroom::getId, Classroom::getJoinType)  
.eq(Classroom::getClassId, signupSubmitVO.getClassId())  
.eq(Classroom::getUserId, userId)  
);  
if (joinType == null && classroom != null) {  
joinType = classroom.getJoinType();  
}  
List<Classroom> hasClassroomList = this.list(  
Wrappers.<Classroom>lambdaQuery()  
.select(Classroom::getId, Classroom::getProvinceId, Classroom::getCityId, Classroom::getArhttp://www.devze.comeaId)  
.eq(Classroom::getClassId, signupSubmitVO.getClassId())  
.ne(classroom != null, Classroom::getId, classroom.phpgetId())  //空指针
);

在测试过程中发生了预期之外的异常,在 .ne(signup != null, YySignup::getId, signup.getId())处报了空指针 在编写这个逻辑的时候,就预料到了classroom可能为null,所以才用了ne(boolean condition, R column, Object val)这个方法

按照我理解的逻辑当condition为false也就是classroom为null时,后面的条件就不会触发,自然classroom.getId()就不会执行,那自然就不会出现空指针异常。

报了异常

但实际它还是报了异常,再认真看了文档,关于condition的说明

boolean condition:表示该条件是否加入最后生成的sql中

也就是说condition只影响.ne( Classroom::getjavascriptId, classroom.getId())这个条件是否加入最后生成的sql,并不会影响classroom.getId()的执行

以为它不会执行后面的操作纯属自己“一厢情愿、自作多情”

在myBATis关于ne的源码中第二个参数是一个Object类型的参数

default Children ne(R column, Object val) {
    return this.ne(true, column, val);
}

而上述代码中传入的是classroom.getId(),方法在执行过程中需要将这个表达式转换成具体的值,也就是执行classroom.getId(),而此时classroom为null,自然就报空指针了。

将classroom是否为null单独拿出来判断

为了规避这个问题,应该需要将classroom是否为null单独拿出来判断

Classroom classroom = this.getOne(
      Wrappers.<Classroom>lambdaQuery()
            .select(Classroom::getId, Classroom::getJoinType)
            .eq(Classroom::pythongetClassId, signupSubmitVO.getClassId())
            .eq(Classroom::getUserId, userId)
);
if (joinType == null && classroom != null) {
   joinType = classroom.getJoinType();
}
LambdaQueryWrapper<Classroom> query = Wrappers.<Classroom>lambdaQuery()
    开发者_Go开发  .select(Classroom::getId, Classroom::getProvinceId, Classroom::getCityId, Classroom::getAreaId)
      .eq(Classroom::getClassId, signupSubmitVO.getClassId())
if (classroom != null) {
   query.ne(Classroom::getId, classroom.getId());
}

虽然麻烦了一点点,但规避了问题。

以上就是mybatisplus之Wrappers.ne踩坑记录解决的详细内容,更多关于mybatisplus Wrappers.ne踩坑的资料请关注我们其它相关文章!

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号