0
点赞
收藏
分享

微信扫一扫

将数据库中的内容存到缓存中

青青子衿谈育儿 2022-02-22 阅读 36
//访问数据库把数据添加到内存当中
 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);*/
}

举报

相关推荐

0 条评论