昨天工做的時候寫了圖片的排序接口,讓後臺自定義圖片的位置.app
話很少說先上修改圖片序號的實現原理:blog
將5號移到2號, 此時區間 [ 2,5 ) 內的排序號都要加1.排序
將2號移到5號, 此時區間 ( 2,5 ] 內的排序號都要減1.接口
新增圖片序號的實現原理:圖片
新增圖片序號爲3,那麼區間 [ 3,∞ ) 內的序號均加1get
瞭解原理後上實現代碼:博客
id:圖片ID;it
imgType:圖片類型;class
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端須要展現的每一個類型的圖片量比較少,因此我寫了個簡單的排序.若是排序量成千上萬,數量比較多的不建議使用我這個實現原理,由於區間內每一個圖片的序號都須要修改對數據的壓力比較大.第一次寫博客,手有點抖,大佬們隨便看看就好