Java実装リストを上へ移動、下へ移動操作のまとめ

4374 ワード

最近、リスト内のデータをカスタマイズしてソートする必要があり、考えてから、上下に移動することでこの機能を実現することにしました.
実現構想:
1.データベースでソートするテーブルにsortフィールドを追加してソートします.
2.sortの値は、1つのレコードが追加されるたびに、前のレコードに+1される.すなわち、新規レコードのたびに、既存のsort値が最も大きいレコードが検出され、新規レコードのsort値がそのレコードのsort値+1となる.
3.リストを上に移動すると現在のデータの前のデータのsort値がクエリされ、両者がsort値を交換し、同じ理屈で下に移動すると、次のデータのsort値がクエリされ、両者が交換される. 
Springboot+mybatisコード実装:
1.SQL
  
  
  

2.dao
/**
     * @Description:       sort 
     * @date: 17:44 2019-3-29
     * @param:
     * @return: int
     */
    Integer selectMaxSort();


    /**
     *   
     * @param sort
     * @return
     */
    ClassicCase moveUp(Integer sort);

    /**
     *    
     * @param sort
     * @return
     */
    ClassicCase moveDown(Integer sort);

3.Service
    /**
     *     
     * @param record
     * @return
     */
    int insertSelective(ClassicCase record);   

   /**
     *   
     * @param classicId
     * @return
     */
    void moveUp(Integer classicId);

    /**
     *   
     * @param classicId
     */
    void moveDown(Integer classicId);




 @Override
    public int insertSelective(ClassicCase record) {

        //       sort 

        Integer sort = classicCaseMapper.selectMaxSort();
        //   0,       
        if (sort == 0) {
            // sort   1
            record.setSort(1);
        } else {
            //      sort    
            record.setSort(sort + 1);
        }
        System.out.println(record.getDetail());
        return classicCaseMapper.insertSelective(record);
    }

 @Override
    public void moveUp(Integer classicId) {

        //             
        ClassicCase classicCase = classicCaseMapper.selectByPrimaryKey(classicId);

        //       
        ClassicCase casePrev = classicCaseMapper.moveUp(classicCase.getSort());

        //          
        if (casePrev == null) {
            return;
        }
        //       sort 
        Integer temp = classicCase.getSort();
        classicCase.setSort(casePrev.getSort());
        casePrev.setSort(temp);

        //      
        classicCaseMapper.updateByPrimaryKeySelective(classicCase);
        classicCaseMapper.updateByPrimaryKeySelective(casePrev);
    }


    @Override
    public void moveDown(Integer classicId) {
        //             
        ClassicCase classicCase = classicCaseMapper.selectByPrimaryKey(classicId);

        //       
        ClassicCase caseNext = classicCaseMapper.moveDown(classicCase.getSort());

        //          
        if (caseNext == null) {
            return;
        }
        //       sort 
        Integer temp = classicCase.getSort();
        classicCase.setSort(caseNext.getSort());
        caseNext.setSort(temp);

        //      
        classicCaseMapper.updateByPrimaryKeySelective(classicCase);
        classicCaseMapper.updateByPrimaryKeySelective(caseNext);
    }

4.Controller
   /**
     *     
     * @param sortStr     (down---  ,up---  )
     * @param classicId   id
     * @return
     */
    @RequestMapping(value = "/updateSort",method = RequestMethod.GET)
    public BaseResponse updateSort(String sortStr, Integer classicId) {

        ResponseBuilder custom = ResponseBuilder.custom();
        try {
            if (sortStr.equals("down")) {
                classicCaseService.moveDown(classicId);
            } else if (sortStr.equals("up")) {
                classicCaseService.moveUp(classicId);
            }

            custom.success(Constant.SUCCESS,Constant.SUCCESS_CODE);
        } catch (Exception e) {
            custom.failed(Constant.FAIL, Constant.EXCEPTION_CODE);
        }
        return custom.build();
    }

これはこの机能の简単な実现で、私个人の认识は浅薄で、もっと良い方法があってまた各位の大神の指导を望みます.