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
- Mybatis-plus Mybatis 问题 plusmybatis-plus框架mybatis问题 mybatis-plus springboot mybatis问题 mybatis-plus selectpage mybatis问题 问题mybatis-plus querywrapper mybatis 问题解答mybatis-plus mybatis问题 mybatis-plus mybatis问题plus mybatis-plus 问题mybatis-plus querywrapper多个 mybatis-plus mybatis plus mybatis-plus springboot mybatis mapper