昨天作業的時候寫了圖片的排序介面,讓后臺自定義圖片的位置.
話不多說先上修改圖片序號的實作原理:

將5號移到2號, 此時區間 [ 2,5 ) 內的排序號都要加1.

將2號移到5號, 此時區間 ( 2,5 ] 內的排序號都要減1.
新增圖片序號的實作原理:

新增圖片序號為3,那么區間 [ 3,∞ ) 內的序號均加1
了解原理后上實作代碼:
id:圖片ID;
imgType:圖片型別;
orderId:圖片序號.
private void orderIdSort(AppImgBackVo appImg){
Example exampleTwo = new Example(AppImg.class);
Example.Criteria criteriaTwo = exampleTwo.createCriteria();
criteriaTwo.andEqualTo("imgType", appImg.getImgType());
//通過圖片型別查找是否存在這個型別的圖片
List<AppImg> appImgList = appImgMapper.selectByExample(exampleTwo);
//如果沒有這個型別的圖片
if(appImgList.size() == 0){
//排序號賦值為1
appImg.setOrderId(1);
}else {
//如果不輸入排序號
if(appImg.getOrderId() == null){
//已存在的數量
Integer orderIdMax = appImgMapper.selectMaxOrderId(appImg.getImgType());
//如果是新增,排序號默認為:數量+1
if(appImg.getId() == null){
appImg.setOrderId(orderIdMax+1);
}else {//如果是修改:排序號默認為最大排序號
appImg.setOrderId(orderIdMax);
}
}else {//自定義排序號
//當排序號小于1時,默認為1
if(appImg.getOrderId() < 1){
appImg.setOrderId(1);
}
if(appImg.getId() == null){//添加
//排序號大于原有數量+1時默認為最大數+1
if(appImg.getOrderId() > appImgList.size()+1){
appImg.setOrderId(appImgList.size()+1);
}
//排序號大于原有數量+1時默認為原有數量+1
for (AppImg appImgTwo : appImgList){ 區間內排序號+1 if(appImgTwo.getOrderId() >= appImg.getOrderId()){
appImgTwo.setOrderId(appImgTwo.getOrderId()+1);
appImgMapper.updateByPrimaryKey(appImgTwo);
}
}
}else {//修改
if(appImg.getOrderId() > appImgList.size()){
//排序號大于原有數量+1時默認為原有數量
appImg.setOrderId(appImgList.size());
}
AppImg appImgOld = appImgMapper.selectByPrimaryKey(appImg.getId());
//原先的排序號
Integer orderIdOld = appImgOld.getOrderId();
//修改后的排序號
Integer orderIdNew = appImg.getOrderId();
//遍歷所有同型別圖片
for (AppImg appImgTwo : appImgList){
if(orderIdOld > orderIdNew){ //向前移動
//改動區間內的排序號+1
if(appImgTwo.getOrderId() >= orderIdNew && appImgTwo.getOrderId() < orderIdOld){
appImgTwo.setOrderId(appImgTwo.getOrderId()+1);
appImgMapper.updateByPrimaryKey(appImgTwo);
}
}else {//向后移動
//改動區間內的排序號-1
if(appImgTwo.getOrderId() <= orderIdNew && appImgTwo.getOrderId() > orderIdOld){
appImgTwo.setOrderId(appImgTwo.getOrderId()-1);
appImgMapper.updateByPrimaryKey(appImgTwo);
}
}
}
}
}
}
}
因為專案里在APP端需要展示的每個型別的圖片量比較少,所以我寫了個簡單的排序.
如果排序量成千上萬,數量比較多的不建議使用我這個實作原理,因為區間內每個圖片的序號都需要修改對資料的壓力比較大.
第一次寫博客,手有點抖,大佬們隨便看看就好
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/87442.html
標籤:MySQL
上一篇:MySQL必知存盤引擎
下一篇:mysql-查詢性能優化
