后端排序优化——谁调用,谁排序

前言

        为了使排序更加灵活,建议后端排序可以优化为“谁调用谁排序”。

代码实现

数据库设计

        以学生表为例。

后端排序优化——谁调用,谁排序_第1张图片

         前端查询条件为姓名,住址。

Controller

        简化后的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

        简化后的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);
    }

Mapper.xml

·文中提到的"stringExtendSort"属于保密代码,不便公示,请自行编写。

总结

        其核心思想就是谁调用,谁排序,增加了代码的灵活性和可持续扩展性质。同时也减少了数据库开销。实际开发时,需要的问题往往更加复杂,建议根据实际情况进行扩充。

【2023-07】

你可能感兴趣的:(建议,mybatis,java)