在數(shù)據(jù)庫(kù)中修改數(shù)據(jù)的順序

客戶需求:可以修改數(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:急遞客

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容