为了使排序更加灵活,建议后端排序可以优化为“谁调用谁排序”。
以学生表为例。
前端查询条件为姓名,住址。
简化后的controller层代码如下:
/**
* queryStudent[查询学生]
* @param name 姓名
* @param address 住址
* @param extendSort 排序
* @param paging 是否分页
* @param page 第几页
* @param size 页大小
* @return java.lang.Object
*/
@RequestMapping(value = "/query",method={RequestMethod.GET,RequestMethod.POST})
public Object queryStudent(
@RequestParam("name")String name,@RequestParam("address")String address,
@RequestParam(value = "extendSort", required = false) String extendSort,
@RequestParam("paging")Boolean paging, @RequestParam("page")Integer page,
@RequestParam("size")Boolean size
) {
if(paging){
PageInfo pageInfo = studentServer.queryStudentPageInfo(name,address,extendSort,page, size);
return JSON.toJSONString(pageInfo);
}else{
return JSON.toJSONString(studentServer.queryStudent(name,address,extendSort));
}
}
简化后的serviceImpl层代码如下:
1.分页查询。
@Override
public PageInfo queryStudentPageInfo(String name,String address,
String extendSort,Integer page,Integer size) {
PageHelper.startPage(page, size);
// 在此定义排序规则,不在sql中定义,因为有的sql没有必要进行排序,比如count(*).谁调用谁排序
PageHelper.orderBy(stringExtendSort.convertString(extendSort, "a", Student.class));
// 定义查询的Map
Map queryMap = new HashMap<>(16);
queryMap.put("name",name);
queryMap.put("address",address);
return new PageInfo<>(studentMapper.queryStudentByMap(queryMap));
}
2.不分页查询
/**
* queryStudent[查询学生,不分页]
* @param name
* @param address
* @param customSort 自定义排序字段
*/
@Override
public List queryStudent(String name,String address,String customSort) {
// 定义查询的Map
Map queryMap = new HashMap<>(16);
queryMap.put("name",name);
queryMap.put("address",address);
queryMap.put("customSort",stringExtendSort.convertString(customSort, "a", Student.class));
return studentMapper.queryStudentByMap(queryMap);
}
·文中提到的"stringExtendSort"属于保密代码,不便公示,请自行编写。
其核心思想就是谁调用,谁排序,增加了代码的灵活性和可持续扩展性质。同时也减少了数据库开销。实际开发时,需要的问题往往更加复杂,建议根据实际情况进行扩充。
【2023-07】