Wrapper条件缺少last("limit 1)拼接,导致查出多条语句报错
下面的代码现在是正确的,最开始在下面代码中我wrapper.last("limit 1");这个条件是缺失的,造成了最后查出来多条语句。
我用的是selctOne只能查出来一条可是根据Wrapper条件查出来多条就会报错。
这里我混淆了selct的用法,以为自己按照时间降序的条件(wrapper.orderByDesc(CardOrderEntity::getEndTime);)查询了并且用了SelectOne就会查出来一条。
总结:用了SelectOne查询是必须保证查出来的语句是单条记录,可以加上这个条件wrapper.last("limit 1");。
* 查询当前用户对应车牌月卡有效期结束时间
*
* @param cardOrder
* @return
*/
private Date validTime(CardOrderEntity cardOrder) {
log.info(">>>>>>>>>>开始查询当前用户对应车牌月卡有效期结束时间<<<<<<<<<<<");
// 查询用户为空 返回null
LambdaQueryWrapper<CardOrderEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(CardOrderEntity::getPhoneNo, cardOrder.getPhoneNo());
wrapper.eq(CardOrderEntity::getCarNo, cardOrder.getCarNo());
wrapper.orderByDesc(CardOrderEntity::getEndTime);
wrapper.last("limit 1");
CardOrderEntity orderEntity = cardOrderMapper.selectOne(wrapper);
// 查询订单信息为空
if (StrUtil.isBlankIfStr(orderEntity)) {
log.info("该订单对应的车主及月卡信息为空");
return null;
} else {
// 查询订单信息不为空
// 查询最后订单有效期时间过期 返回null
if (DateUtils.dateCompare(orderEntity.getEndTime(), new Date(), dateFormat)) {
log.info("该订单对应的车主及月卡信息不为空,但有效期时间已结束");
return null;
} else {
// 获取最后一笔订单的结束时间
log.info("该订单对应的车主及月卡信息不为空,最后有效期结束时间为:{}", orderEntity.getEndTime());
return orderEntity.getEndTime();
}
}
}