列表的上移动和下移动实现
2023-12-22 21:34:13
实现思路:
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());
}
}
文章来源:https://blog.csdn.net/weixin_67573348/article/details/135156243
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!