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');
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<Remove> 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());
}