经常会遇到多级菜单、多级分类问题,但是某个数据处于第几级,应该是程序自己判断得出,新增一条数据时,父级以上的需要升级,删除一条数据时,父级以上的需要降级。下面总结了自己用到的一个公用方法去处理等级问题:
/**
* 递归更新父级以及以上分类的等级(升级+1、降级-1)
* @param tbInformation 当前实体对象
* @param num 父级分类的等级,将要变化的数字
* @throws FrameworkException
*/
private void checkParentInfoRank(TBInformation tbInformation, int num) throws FrameworkException {
if (tbInformation.getParentInfoId()!=null && !"".equals(tbInformation.getParentInfoId())) {
//是否有和当前对象平等级的数据,有平级数据则父级数据等级不变
TBInformation info = new TBInformation();
info.setParentInfoId(tbInformation.getParentInfoId());
List
list = tbInformationDao.queryInformationList(tbInformation);
TBInformation information = tbInformationDao.queryInformationById(tbInformation.getParentInfoId());
if (list!=null && list.size()==0) {//没有平级数据
if (information!=null) {
information.setRank( information.getRank()+num );
tbInformationDao.updateInformation(information);
checkParentInfoRank(information, num);
}
}
}
}
其中,实体类中的等级是int类型,父级编号还是同一张数据表中的Id字段,升级、降级的数字可以作为参数输入。