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 方法会返回一个布尔值,表示更新操作是否成功。

  1. 更新的数据不存在:如果更新的数据在数据库中不存在,则更新操作会失败,update 方法会返回 false。

  2. 更新的数据已经被其他线程或进程修改:如果更新的数据在更新操作之前已经被其他线程或进程修改了,则更新操作会失败,update 方法会返回 false。

  3. 更新的数据被删除:如果更新的数据在更新操作之前被删除了,则更新操作会失败,update 方法会返回 false。

需要注意的是,如果更新的数据不存在或已经被删除,update 方法不会抛出异常,而是返回 false。因此,在使用 update 方法时,需要根据返回值来判断更新操作是否成功。

posted @ 2023-07-07 15:37  staticFinal  阅读(447)  评论(0)    收藏  举报