Mybatis-plus使用问题注意

发布时间 2023-07-07 15:43:13作者: staticFinal

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