根据 mybatis 根据多字段排序已经wrapper 根据多字段排序
首先根据咱们返回前端的数据列来规划好排序字段
如下:
这里的字段为返回VO的字段,要转换成数据库字段然后加入到排序中
示例,穿了 surname,cerRank 多字段,然后是倒序 false
首先创建好映射,如下代码,第一个List 为前端字段VO, 第二个List 为数据库字段。Util.handle 是将两个转换为map,然后就可以做映射啦。下面也写啦handle的方法。
Map<String,String> SORTCOLUMNMAP =
Util.handle(Arrays.asList("surname","idcardNum","cerCode","cerType","cerRank","permissionTime","expirationTime"),
Arrays.asList("surname","idcard_num","cer_code","cer_type","cer_rank","permission_time","expiration_time"));
/**
* 将两个list转换为Map
* @author ZMH
* @return Map<String, String>
*/
public static Map<String, String> handle(List<String> list1, List<String> list2) {
Map<String, String> map = IntStream.range(0, list1.size())
.collect(HashMap::new, (m, i) -> m.put(list1.get(i), list2.get(i)), (m, n) -> {
});
return map;
}
到这里之后我们就做一个转换的方法吧,然后这里测试如下,结果为surname,cer_rank 成功的改为了数据库字段,然后就可以加入到wrapper和sql 中啦。
sql的话大家应该都知道怎么写,就不写sql的啦。写一个wrapper 的列子,如下:
queryCondition(queryWrapper,dto);//查询条件封装的方法都是一些判断
if (StringUtils.isNotBlank(dto.getOrderByColumns())){
String order = dto.getOrderByAsc() ? "asc" : "desc";//正序倒序
String columns = Util.getColumns(baseMapper.SORTCOLUMNMAP, dto.getOrderByColumns());//获取数据库字段
queryWrapper.last(" order by ".concat(columns).concat(" ").concat(order));//最后拼接到wrapper 里面就可以来啦.
}else {
queryWrapper.orderByDesc(GzhExamCertificate::getCerCode);
}