//访问数据库把数据添加到内存当中 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);*/ }