//访问数据库把数据添加到内存当中
public Map<Integer,List<Departments>> getMap(){
Map<Integer,List<Departments>> map = new HashMap<>() ; //创建一搜空船
//通过访问数据库把数据添加到集合当中,现将所有数据添加到这个map集合当中
/*QueryWrapper<Departments> queryWrapper = new QueryWrapper<>() ;
queryWrapper.eq("departments", "dpm_name");//表示和这个name相等的数据*/
List<Departments> onelists = departmentsMapper.selectList(null) ;
for(Departments onelist : onelists){
//对每一个一级标题进行处理
//出发点,每一个一级标题应该包含二级标题,而不是把一级标题的父id来进行分类
if(map.containsKey(onelist.getParentId())){//匹配船上的人隶属于那一边
/*这个if表示是map集合中包含自己的情况*/
//如果这个map集合中包含了相同的的值Map<0,List<Departments>>
//list.add(onelist);//这一步是把该对象添加到了List集合中
map.get(onelist.getParentId()).add(onelist);
}else{
/*这个else表示是一级标题没有子集的情况*///!containsKey(onelist)
/*到最后是要返回一个map集合*/
List<Departments> list = new ArrayList<>() ;//现在集合中有对象了
list.add(onelist);//这一步是属于0级标题/*map不包含任何子集那不就水一级标题吗// */
map.put(onelist.getParentId(), list);
//表示如果有就追加,如果没有就自己造一搜船,供子集上船
}
}//其中这个Integer是Deparments对象中对象Id的值
//要根据Integer
return map ;
}
//-------------------------------------------------------------------------------------------------------------------------------
/*先遍历出一级标题*/
public List<Departments> getEndList(Map<Integer,List<Departments>> map){
//该方法返回的是一个部门集合对象,是要找出来能够返回给前端数据的二级标题集合对象
//参数就是一个map对象
//这一步是为了的到所有二级标题对象
List<Departments> oneLists = map.get(0);//这里面的0可以表示为一个父级id,因为所以一级标题的父id都是0
//List<Departments> twoLists = null ; 当这里设置为局部变量的时候可以设置返回值返回,但是在循环当中,没法为变量附上值
//所以不能返回
/*核心思想就是通过一级标题的id来获取二级标题的对象*/
for (Departments oneList : oneLists ){
//对遍历的每一个一级标题进行处理
//oneList是一个一级标题,一级标题中有id,这个id可以和子类id的做对应
//oneList.getDpmId();//这个是父级标题的id,子类通过这个id进行一一 配对
List<Departments> twoLists = map.get(oneList.getDpmId());
//最重要的一步,就是将所有二级标题对象,封装到每一个一级标题对象的内部
oneList.setChildren(twoLists);//对象中也有属性,对象中也有集合属性
}
return oneLists ; //这个时候每一个一级标题的内部就有了很多子标题
}
//-------------------------------------------------------------------------------------------------------------------------------
@Override
public List<Departments> findpmList(Integer level) {
//要确认的是,返回给控制层的是一个List集合
//这里面可以采用将数据存在内存中,在内存中创建方法将数据存储在内存中
//如果是要存内存,用什么样的集合来进行调用比较好呢
//map的key|value形式,key可以标注为层级,value可以设置为该级别下的对象
/*采用getKey的方式将对象值拿出来,所以应该根据parentId来进行分组,所有子类的父id和父类的id相等为一个集合*/
/*所以是应该先把所有一级标题遍历出来,然后再根据一级标题,把二级标题给遍历出来*/
/*数据库中没有层级属性,判断是几级标题只能通过父Id和子id之间的区别*/
/** Map<1,部门对象>先把这些层级给遍历出来 如何实现 select dpmName from Deparentment where level = 1 */
//map集合中包着List集合
//普通的map是一个key一个value,都是单一的对象
//通过等级来进行遍历
//查询数据库中的数据,怎么做,应该先用map集合把数据存在内存当中,存在内存之后通过调用方法,将一二级数据查询出来
Map<Integer,List<Departments>> map = getMap() ;
if (level==1){
List<Departments> list1 = map.get(0);//这个0表示的就是父类id为0,也就是一级标题遍历出来
return list1 ;
}
List<Departments> list2 = getEndList(map);
return list2;
/* Map<Integer,List<Departments>> map = getMap();
if(level == 1) return map.get(0);
return finTwoList(map);*/
}
