拖动排序的后台处理

有时候总是要用到排序,一下总结了两种排序的算法。

(待排序的实体对象有有个序号字段)

1、把一对象排在目标对象之上;可以跨级排序。排序之后目标对象的序号总是排在被排序的对象之后。

// 目标序号
            Integer intMuBiaoXuHao = mubiaoYh.getYhXh();
                   TYh tyh = tyhDAO.findById(myh.getYhId());//待排序的对象
            String JPQL_JIA = "update TYh model set model.yhXh = model.yhXh + 1 where model.yhXh >= ? and model.tbmByyhBmid.classId = " + myh.getYhBmid();
                   String JPQL_JIAN = "update TYh model set model.yhXh = model.yhXh - 1 where model.yhXh >= ? and model.tbmByyhBmid.classId = " + tyh.getTbmByyhBmid().getClassId();
                  if (intMuBiaoXuHao - 1 > tyh.getYhXh() && myh.getYhBmid().equals(tyh.getTbmByyhBmid().getClassId())) {
                 tyhDAO.executeByJPQL(JPQL_JIA, intMuBiaoXuHao);
                 tyhDAO.executeByJPQL(JPQL_JIAN, tyh.getYhXh());
                 myh.setYhXh(intMuBiaoXuHao - 1);
                } else if (intMuBiaoXuHao < tyh.getYhXh() || !myh.getYhBmid().equals(tyh.getTbmByyhBmid().getClassId())) {
                 tyhDAO.executeByJPQL(JPQL_JIAN, tyh.getYhXh());
                tyhDAO.executeByJPQL(JPQL_JIA, intMuBiaoXuHao);
                 myh.setYhXh(intMuBiaoXuHao);
                }tyhDAO.update(tyh);

 我采用的是spring和jap做的,此处只介绍算法思路。配置就免了。

2、也就是很普通的替换排序,一个对象替换了另一个对象的位置,当目标序号>原始序号,小于等于目标序号的对象序号都-1,当目标序号<原始序号,大于等于目标序号的对象序号都+1。代码:

Integer intMuBiaoXuHao = 0;
        TXx txx = txxDAO.findById(xxId);
        TXx txxnew = txxDAO.findById(xxNewId);//被替换的目标选项
        intMuBiaoXuHao = txxnew.getXxXh();//新序号,目标序号
        String JPQL_JIA = "update TXx model set model.xxXh = model.xxXh + 1 where model.xxXh >= ? and model.xxLx ='"+txx.getXxLx()+"'";
        String JPQL_JIAN = "update TXx model set model.xxXh = model.xxXh - 1 where model.xxXh >= ? and model.xxLx ='"+txx.getXxLx()+"'";
        if (intMuBiaoXuHao > txx.getXxXh() ) {//目标序号大于原始序号
          txxDAO.executeByJPQL(JPQL_JIAN, txx.getXxXh());
          txxDAO.executeByJPQL(JPQL_JIA, intMuBiaoXuHao);
        } else if (intMuBiaoXuHao < txx.getXxXh()) {//目标序号小于原始序号
          txxDAO.executeByJPQL(JPQL_JIA, intMuBiaoXuHao);
          txxDAO.executeByJPQL(JPQL_JIAN, txx.getXxXh()+1);
        }
        txx.setXxXh(intMuBiaoXuHao);
        txxDAO.update(txx);

相关推荐