Java実装リストを上へ移動、下へ移動操作のまとめ
4374 ワード
最近、リスト内のデータをカスタマイズしてソートする必要があり、考えてから、上下に移動することでこの機能を実現することにしました.
実現構想:
1.データベースでソートするテーブルにsortフィールドを追加してソートします.
2.sortの値は、1つのレコードが追加されるたびに、前のレコードに+1される.すなわち、新規レコードのたびに、既存のsort値が最も大きいレコードが検出され、新規レコードのsort値がそのレコードのsort値+1となる.
3.リストを上に移動すると現在のデータの前のデータのsort値がクエリされ、両者がsort値を交換し、同じ理屈で下に移動すると、次のデータのsort値がクエリされ、両者が交換される.
Springboot+mybatisコード実装:
1.SQL
2.dao
3.Service
4.Controller
これはこの机能の简単な実现で、私个人の认识は浅薄で、もっと良い方法があってまた各位の大神の指导を望みます.
実現構想:
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();
}
これはこの机能の简単な実现で、私个人の认识は浅薄で、もっと良い方法があってまた各位の大神の指导を望みます.