客户需求:可以修改数据的顺序
思路
1.在数据库表中加一个next字段,next指向下一个数据id,形成一个单链表
2.第一条数据的next数据设为-1
这是我的表结构
捕获bbbjg.PNG
排序
62E84FACA45A2D9F971C13517B4D8DB3.png
1.先定位到-1(第一条数据)
2.拿到第一条数据的id,用id匹配下一条数据的next
public List<UserScene> order(List<UserScene> userSceneList) {
Map<Integer, UserScene> sceneMapId = new LinkedHashMap<>();
Map<Integer, UserScene> sceneMapNext = new LinkedHashMap<>();
List<UserScene> userSceneListOrder = new LinkedList<>();
int next = 0;
for (int i = 0; i < userSceneList.size(); i++) {
sceneMapId.put(userSceneList.get(i).getId(), userSceneList.get(i));
sceneMapNext.put(userSceneList.get(i).getNext(), userSceneList.get(i));
if (userSceneList.get(i).getNext() == -1) {
next = userSceneList.get(i).getId();
userSceneListOrder.add(userSceneList.get(i));
}
}
while (sceneMapNext.containsKey(next)) {
userSceneListOrder.add(sceneMapNext.get(next));
next = sceneMapId.get(sceneMapNext.get(next).getId()).getId();
}
return userSceneListOrder;
}
添加数据
1.添加数据时把next设为-1
2.添加成功后,把倒数第二条数据的next改为最后一条数据的id
public UserScene addScene(String name, int userId) {
UserScene userScene1 = new UserScene();
userScene1.setUserid(userId);
List<UserScene> userSceneList = userSceneMapper.select(userScene1);
UserScene userScene = new UserScene();
userScene.setName(name);
if (userSceneList.size() == 0) {
userScene.setNext(-1);
} else {
List<UserScene> userSceneListOrder = order(userSceneList);
userScene.setNext(userSceneListOrder.get(userSceneListOrder.size() - 1).getId());
}
userScene.setUserid(userId);
userSceneMapper.insert(userScene);
return userSceneMapper.selectOne(userScene);
}
删除数据
53D69CE67726129BDC11798A202F4D7C.png
B4B3CD278E45C48FA2A8BC3C4EB9DF07.png
92361785008153DF0E124BF2D9EF287D.png
public List<UserScene> deleteUserScene(int userId, int id) {
UserScene userScene1 = new UserScene();
userScene1.setUserid(userId);
List<UserScene> userSceneList = order(userSceneMapper.select(userScene1));
if (userSceneList.size() > 1) {
for (int i = 0; i < userSceneList.size(); i++) {
if (userSceneList.get(i).getId() == id) {
if (i == 0) {
UserScene userScene = new UserScene();
userScene.setNext(-1);
userScene.setId(userSceneList.get(i + 1).getId());
userSceneMapper.updateByPrimaryKeySelective(userScene);
} else if (i == userSceneList.size() - 1) {
//最后一个数据不做任何操作,直接删除
} else {
UserScene userScene = new UserScene();
userScene.setNext(userSceneList.get(i).getNext());
userScene.setId(userSceneList.get(i + 1).getId());
userSceneMapper.updateByPrimaryKeySelective(userScene);
}
}
}
}
UserScene userScene = new UserScene();
userScene.setId(id);
userSceneMapper.delete(userScene);
return order(userSceneMapper.select(userScene1));
}
移动位置
A42C19F62C6BF30703BFE4035F939AE4.png
1.将第四条的next改为第一条数据的id
2.原来第二条数据的next改为原来第四条数据的id
public List<UserScene> moveUserScene(int userId, int id, int nextId) {
UserScene userScene1 = new UserScene();
userScene1.setUserid(userId);
List<UserScene> userSceneList = order(userSceneMapper.select(userScene1));
if (id != nextId)//相等说明没有移动
for (int i = 0; i < userSceneList.size(); i++) {
if (id == userSceneList.get(i).getId()) {
//修改移动前的
if (i == 0) {
UserScene userScene = new UserScene();
userScene.setId(userSceneList.get(i + 1).getId());
userScene.setNext(-1);
userSceneMapper.updateByPrimaryKeySelective(userScene);
} else if (i + 2 <= userSceneList.size()) {
UserScene userScene = new UserScene();
userScene.setId(userSceneList.get(i + 1).getId());
userScene.setNext(userSceneList.get(i - 1).getId());
userSceneMapper.updateByPrimaryKeySelective(userScene);
}
} else if (nextId == userSceneList.get(i).getId()) {
//修改移动后的
if (i==0){
UserScene userScene = new UserScene();
userScene.setId(id);
userScene.setNext(-1);
userSceneMapper.updateByPrimaryKeySelective(userScene);
UserScene userScene2 = new UserScene();
userScene2.setId(userSceneList.get(i).getId());
userScene2.setNext(id);
userSceneMapper.updateByPrimaryKeySelective(userScene2);
}else {
UserScene userScene = new UserScene();
userScene.setId(id);
userScene.setNext(userSceneList.get(i-1).getId());
userSceneMapper.updateByPrimaryKeySelective(userScene);
UserScene userScene2 = new UserScene();
userScene2.setId(nextId);
userScene2.setNext(id);
userSceneMapper.updateByPrimaryKeySelective(userScene2);
}
}
}
if (nextId==-1){//移动到最后一位
UserScene userScene = new UserScene();
userScene.setId(id);
userScene.setNext(userSceneList.get(userSceneList.size()-1).getId());
userSceneMapper.updateByPrimaryKeySelective(userScene);
}
return order(userSceneMapper.select(userScene1));
}
有问题可以私信我的gzh:急递客