有时候总是要用到排序,一下总结了两种排序的算法。
(待排序的实体对象有有个序号字段)
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);