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

实现思路:

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实现

值交换实现:

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.entity;

import lombok.Data;

@Data
public class Remove {

    private Integer classId;

    private Integer classSort;

    private String className;
}
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);
    
     // 查询最大的sort
    @Select("SELECT MAX(class_sort) FROM t1")
    int getMaxSort();
    
    // 根据id 修改 Sort
    // 数据更新
    @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 WHERE class_sort > #{classSort} ORDER BY class_sort ASC LIMIT #{limit}")
    Remove getNextRecord(@Param("classSort") Integer classSort, @Param("limit") int limit);

     // 上一条记录
    @Select("SELECT * FROM t1 WHERE class_sort < #{classSort} ORDER BY class_sort DESC LIMIT #{limit}")
    Remove getPreviousRecord(@Param("classSort") Integer classSort, @Param("limit") int limit);

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

        // 获取要上移的记录
        Remove target = removeTestMapper.getRemoveList(targetId);
        if (target == null) {
            return;  // 处理记录不存在的情况
        }

        // 获取上一个记录
        Remove previousRecord = removeTestMapper.getPreviousRecord(target.getClassSort(), 1);

        // 如果上一个记录存在,进行交换排序值的操作
        if (previousRecord != null) {
            // 获取上一个记录的排序值
            int previousSortValue = previousRecord.getClassSort();

            // 进行交换排序值的操作
            removeTestMapper.updateRemoveSort(target.getClassId(), previousSortValue);
            removeTestMapper.updateRemoveSort(previousRecord.getClassId(), target.getClassSort());
        }
    }


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

        // 获取要下移的记录
        Remove target = removeTestMapper.getRemoveList(targetId);
        if (target == null) {
            return;  // 处理记录不存在的情况
        }

        // 获取下一个记录的排序值(确保只返回一个记录)
        Remove next = removeTestMapper.getNextRecord(target.getClassSort(), 1);

        // 如果下一个记录存在,进行交换排序值的操作
        if (next != null) {
            // 获取下一个记录的排序值
            int nextSort = next.getClassSort();

            // 进行交换排序值的操作
            removeTestMapper.updateRemoveSort(target.getClassId(), nextSort);
            removeTestMapper.updateRemoveSort(next.getClassId(), target.getClassSort());
        }
    }

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值