在使用Redis传入mysql查询数据时,mysql返回的数据默认按照id顺序返回,与所传入的参数顺序不一致,此时解决办法,在mysql语句中添加ORDER BY FIELD(字段名,具体的顺序).
在spring中应如下操作:
首先将redis想插入到mysql的数据按照顺序进行转换为字符串的形式:
String idStr = StrUtil.join(",",ids);
然后在查询时将语句修改为如下语句:
List<UserDTO> userDTOList = userService.query().in("id",ids)
.last("ORDER BY FIELD(id," + idStr + ")").
list().stream().map(
user -> BeanUtil.copyProperties(user, UserDTO.class))
.collect(Collectors.toList());
其中 in 表示指示的字段的名称, .last表示添加的最后一句sql语句,手动指定了需要的顺序.