客戶需求:可以修改數(shù)據(jù)的順序
思路
1.在數(shù)據(jù)庫(kù)表中加一個(gè)next字段,next指向下一個(gè)數(shù)據(jù)id,形成一個(gè)單鏈表
2.第一條數(shù)據(jù)的next數(shù)據(jù)設(shè)為-1
這是我的表結(jié)構(gòu)
捕獲bbbjg.PNG
排序

62E84FACA45A2D9F971C13517B4D8DB3.png
1.先定位到-1(第一條數(shù)據(jù))
2.拿到第一條數(shù)據(jù)的id,用id匹配下一條數(shù)據(jù)的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;
}
添加數(shù)據(jù)
1.添加數(shù)據(jù)時(shí)把next設(shè)為-1
2.添加成功后,把倒數(shù)第二條數(shù)據(jù)的next改為最后一條數(shù)據(jù)的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);
}
刪除數(shù)據(jù)

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) {
//最后一個(gè)數(shù)據(jù)不做任何操作,直接刪除
} 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));
}
移動(dòng)位置

A42C19F62C6BF30703BFE4035F939AE4.png
1.將第四條的next改為第一條數(shù)據(jù)的id
2.原來(lái)第二條數(shù)據(jù)的next改為原來(lái)第四條數(shù)據(jù)的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)//相等說(shuō)明沒(méi)有移動(dòng)
for (int i = 0; i < userSceneList.size(); i++) {
if (id == userSceneList.get(i).getId()) {
//修改移動(dòng)前的
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()) {
//修改移動(dòng)后的
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){//移動(dòng)到最后一位
UserScene userScene = new UserScene();
userScene.setId(id);
userScene.setNext(userSceneList.get(userSceneList.size()-1).getId());
userSceneMapper.updateByPrimaryKeySelective(userScene);
}
return order(userSceneMapper.select(userScene1));
}
有問(wèn)題可以私信我的gzh:急遞客