SSH联合开发过程中发现当多对多的关系存在时,比如role和function,多对多的关系,我想通过role获得这个role的所有的function并且按照自己想要的方式进行排序,但是发现配置的时候没找到合适的方式。只好自己重写了Comparable的compareTo方法,并且将封装好的数据转为treeSet对象传递到前台实现数据的有序化。
Function对应的bean类:
public class Function implements Comparable<Function>{
private Integer functionId;
private String functionName;
private String functionUrl;
private Integer order;
private FunctionGroup functionGroup;
private Set<Role> roles = new HashSet<Role>();
public int compareTo(Function func) {
return this.order - func.order;
}
}
public List<FunctionGroup> findMenuByUser(User user) {
// 拿到functionList,包含了所有的function
List<Function> functionList = menuDao.findMenuByUser(user);
// 对functionList进行分组提取functionGroup并封装到functionGroup对象当中去
// 存放FunctionGroup分组对象
List<FunctionGroup> functionGroupList = new ArrayList<FunctionGroup>();
FunctionGroup functionGroup = null;
// 声明并初始化一个functionGroup中用于封装其function的List集合有序的
List<Function> functionListOrder = new ArrayList<Function>();
if(functionList != null && functionList.size() > 0){
String functionGroupName = "";
for(Function function : functionList){
// 如果保存的分组名称与当前功能function的分组名称不一致的话就说明是新的分组
if(!functionGroupName.equals(function.getFunctionGroup().getGroupName())){
// 新的分组就要在分组List中添加
if(functionGroup != null){
functionGroup.setFunctions(new TreeSet<Function>(functionListOrder));
functionGroupList.add(functionGroup);
}
// 将分组名称替换为当前function的分组的名称
functionGroupName = function.getFunctionGroup().getGroupName();
functionGroup = function.getFunctionGroup();
functionListOrder.clear();
}
// 如果保存的分组名称与当前功能function的分组名称一致的话不是新的分组
// 那么该功能项function就是functionGroup就是function的分组,更新functionGroup中function集合
functionListOrder.add(function);
}
// 添加最后一个分组
if(functionGroup != null){
functionGroup.setFunctions(new TreeSet<Function>(functionListOrder));
functionGroupList.add(functionGroup);
}
}