Mybatis-plus使用问题注意
1. wrapper中匹配值不要有处理逻辑
例如以id为条检查时,传入的参数为String,需要将其转为Long进行匹配,常规的写法为:
LambdaQueryWrapper<Student> wrapper = Wrappers.<Student>lambdaQuery()
.eq(ObjectUtils.isNotEmpty(strId), Student::id, Long.valueOf(strId));
这么看好像没啥问题,先判断strId是否为null,不为null才会对strId进行Long类型转换并匹配查询。
但eq里的三个参数是同时放进去的,具体对这三个参数的使用在eq函数内部,因此Long.valueOf(strId)
与ObjectUtils.isNotEmpty(strId)
在这里是没有关联的和先后顺序的,当strId为null时,valueOf会抛出异常,方法也就中断了。
针对这种需要转换后放入查询的值,不能wrapper的条件函数中转换,条件函数中只放入已处理完成的值
可以使用这种写法
LambdaQueryWrapper<Student> wrapper = Wrappers.<Student>lambdaQuery();
if(ObjectUtils.isNotEmpty(strId)){
wrapper.eq(Student::id, Long.valueOf(strId));
}
当然这只是简化的案例,实际开发中对于这些需类型转换的字段会有统一的DTO和conventer
update什么情况下返回false
MyBatis-Plus 的 update 方法会返回一个布尔值,表示更新操作是否成功。
-
更新的数据不存在:如果更新的数据在数据库中不存在,则更新操作会失败,update 方法会返回 false。
-
更新的数据已经被其他线程或进程修改:如果更新的数据在更新操作之前已经被其他线程或进程修改了,则更新操作会失败,update 方法会返回 false。
-
更新的数据被删除:如果更新的数据在更新操作之前被删除了,则更新操作会失败,update 方法会返回 false。
需要注意的是,如果更新的数据不存在或已经被删除,update 方法不会抛出异常,而是返回 false。因此,在使用 update 方法时,需要根据返回值来判断更新操作是否成功。