mybatisplus之Wrappers.ne踩坑记录解决
作者:data_too_long 时间:2021-08-28 10:13:13
一段看似平平无奇的代码
Classroom classroom = 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::getAreaId)
.eq(Classroom::getClassId, signupSubmitVO.getClassId())
.ne(classroom != null, Classroom::getId, classroom.getId()) //空指针
);
在测试过程中发生了预期之外的异常,在 .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::getId, 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::getClassId, signupSubmitVO.getClassId())
.eq(Classroom::getUserId, userId)
);
if (joinType == null && classroom != null) {
joinType = classroom.getJoinType();
}
LambdaQueryWrapper<Classroom> query = Wrappers.<Classroom>lambdaQuery()
.select(Classroom::getId, Classroom::getProvinceId, Classroom::getCityId, Classroom::getAreaId)
.eq(Classroom::getClassId, signupSubmitVO.getClassId())
if (classroom != null) {
query.ne(Classroom::getId, classroom.getId());
}
虽然麻烦了一点点,但规避了问题。
来源:https://juejin.cn/post/7230595863692509243
标签:mybatisplus,Wrappers.ne,踩坑
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
java swing实现QQ账号密码输入框
2023-01-13 06:26:52
![](https://img.aspxhome.com/file/2023/2/71592_0s.png)
Java for循环标签跳转到指定位置的示例详解
2022-10-04 17:52:31
对Java的面对对象编程中对象和引用以及内部类的理解
2022-02-22 12:11:15
Mybatis对mapper的加载流程深入讲解
2022-06-01 12:33:04
![](https://img.aspxhome.com/file/2023/7/62207_0s.png)
关于Java float和double精度范围大小
2023-11-29 00:52:01
![](https://img.aspxhome.com/file/2023/2/60672_0s.png)
使用java实现BBS论坛发送邮件过程详解
2022-12-19 16:58:30
![](https://img.aspxhome.com/file/2023/3/65763_0s.png)
Android token过期刷新处理的方法示例
2023-11-23 14:11:40
SpringBoot获取前台参数的六种方式以及统一响应
2023-08-22 21:25:23
![](https://img.aspxhome.com/file/2023/6/58336_0s.png)
JAVA使用JDBC连接oracle数据库的详细过程
2021-11-20 19:20:19
![](https://img.aspxhome.com/file/2023/4/63414_0s.png)
Java毕业设计实战之线上水果超市商城的实现
2021-09-15 19:23:01
![](https://img.aspxhome.com/file/2023/9/62779_0s.png)
Java RateLimiter的限流详解
2023-01-06 17:14:12
![](https://img.aspxhome.com/file/2023/9/63669_0s.png)
java解析json数组方式
2023-08-10 17:22:14
![](https://img.aspxhome.com/file/2023/8/58188_0s.png)
java实现PPT转化为PDF
2021-06-17 05:02:24
Java 高并发三:Java内存模型和线程安全详解
2021-10-24 07:04:13
![](https://img.aspxhome.com/file/2023/6/59966_0s.png)
详解MyBatis配置typeAliases的方法
2023-11-29 06:21:52
解析Java的Hibernate框架中的持久化类和映射文件
2023-08-19 15:00:05
Java创建线程的七种方法总结(全网最全面)
2023-11-03 14:27:26
![](https://img.aspxhome.com/file/2023/8/58698_0s.png)
C# 添加对System.Configuration.dll文件的引用操作
2022-03-05 22:20:31
![](https://img.aspxhome.com/file/2023/7/69807_0s.jpg)
解决logback-classic 使用testCompile的打包问题
2021-07-01 08:16:50
java创建多级目录文件的实例讲解
2023-11-27 09:29:02