列表的上移动和下移动实现

实现思路:

1. 定义一个自增的字段sort,从小到大。

2. 上移动:  当前sort字段 + 1 ,上一个的sort修改为当前查询的sort 。

3. 下移动: 当前sort字段 - 1 ,下一个的sort值修改为当前的sort

4. 注意判断sort不存在情况。

数据库:

create table t1
(
    class_id   int auto_increment primary key,
    class_sort int,
    class_name varchar(255)
);
INSERT INTO t1 (class_sort, class_name) VALUES
(1, 'Test Record 1'),
(2, 'Test Record 2'),
(3, 'Test Record 3'),
(4, 'Test Record 4'),
(5, 'Test Record 5');

 java实现

java实现思路:

1.字段值sort的添加,因为是自增的情况,所以每次添加查询sort的最大值 +1。

2. 拿到要移动的id值,根据id查询到sort ,上移动  + 1 ,根据id去修改(sort值+1)

3. 下移动-1,根据id值修改(sort值-1);

4. 被改变的id值 修改为 查询到的id值的 sort

package com.ma.mybatistest.mapper;

import com.ma.mybatistest.entity.Remove;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * @author Mtz
 * @version 1.0
 * @2023/12/2214:16
 * @function
 * @comment
 */

@Mapper
public interface RemoveTestMapper {

    // 添加数据
    int addT1(Remove remove);

    // 根据id 查询
    @Select("SELECT * FROM t1 WHERE class_id = #{classId}")
    Remove getRemoveList(int classId);

    @Select("SELECT * FROM t1 WHERE class_sort = #{classSort}")
    Remove getSort(int shang);

    @Select("SELECT MAX(class_sort) FROM t1")
    int getMaxSort();

    // 数据更新
    @Update("UPDATE t1 SET class_sort = #{newSort} WHERE class_id = #{classId}")
    void updateRemoveSort(@Param("classId") int classId, @Param("newSort") int newSort);

    @Select("SELECT * FROM t1 ORDER BY class_sort ASC")
    List getAllRecordsOrderedBySort();
}
@Test
void moveUp() {
    int targetId = 18;  // 要上移的记录的 class_id

    // 获取要上移的记录及相邻记录
    Remove target = removeTestMapper.getRemoveList(targetId);
    Remove previous = removeTestMapper.getSort(target.getClassSort() - 1);

    // 如果上一个记录存在,进行交换排序值的操作
    if (previous != null) {
        swapSortValues(target, previous);
    }
}

@Test
void moveDown() {
    int targetId = 16;  // 要下移的记录的 class_id

    // 获取要下移的记录及相邻记录
    Remove target = removeTestMapper.getRemoveList(targetId);
    Remove next = removeTestMapper.getSort(target.getClassSort() + 1);

    // 如果下一个记录存在,进行交换排序值的操作
    if (next != null) {
        swapSortValues(target, next);
    }
}

// 交换两个记录的排序值
private void swapSortValues(Remove record1, Remove record2) {
    removeTestMapper.updateRemoveSort(record1.getClassId(), record2.getClassSort());
    removeTestMapper.updateRemoveSort(record2.getClassId(), record1.getClassSort());
}

你可能感兴趣的:(需求实现,算法,数据结构)