关于查询二级分类的简单方法

本文介绍了一种在前后端分离项目中处理二级查询的方法,通过创建一级和二级实体,根据数据库查询结果进行数据封装,将一级分类及其对应的二级分类组织成集合传递给前端。这种方法简化了数据库操作,易于理解,适用于二级分类的情况,但若涉及多级分类,建议使用递归方式处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在项目中大多是前后端分离的项目,我们后端给数据,前端调用数据展示,所以我们后端可以将查到的数据放到集合里面,传递给前端。

1.二级查询的思路与方法,我们可以再创建两个实体,一个是一级实体,一个是二级实体,有人可能会有疑问,一级,二级里面要有啥属性呢,首先必须有id,其次就是你想要在前端展示内容,比如名字,年龄等信息,另外一级实体里面有包含二级实体,也就是说一个一级里面可以有许多的二级,直接看图吧

 

2.从我们的数据库中查出所有的一级与二级分类

 3 创建list集合,存储我们的数据,这就是我们要传到前端的内容

 4 对我们的一级分与二级分类类进行封装,首先遍历查到的所有一级分类,然后把每一个一级分类赋值到我们所新创建的一级分类实体,此时在得到此一级分类的id,然后遍历我们的所查询二级分类集合,当我们的二级分类的父id与一级分类id相等时,说明此时的二级分类是属于此一级分类的,我们就将它加入集合,内循环完成后,我们就查找到了此一级分类的所有二级分类,我们集合赋值给我们的新创建一级分类的child,最后返回我们的list集合即可。代码如下

 public List<OneSubject> getAllOneTwoSubject() {

            //1 查询所有一级分类  parentid = 0
            QueryWrapper<Subject> wrapperOne = new QueryWrapper<>();
            wrapperOne.eq("parent_id","0");
            List<Subject> oneSubjectList = baseMapper.selectList(wrapperOne);

            //2 查询所有二级分类  parentid != 0
            QueryWrapper<Subject> wrapperTwo = new QueryWrapper<>();
            wrapperTwo.ne("parent_id","0");
            List<Subject> twoSubjectList = baseMapper.selectList(wrapperTwo);

            //创建list集合,用于存储最终封装数据
            List<OneSubject> finalSubjectList = new ArrayList<>();

            //3 封装一级分类
            //查询出来所有的一级分类list集合遍历,得到每个一级分类对象,获取每个一级分类对象值,
            //封装到要求的list集合里面 List<OneSubject> finalSubjectList
            for (int i = 0; i < oneSubjectList.size(); i++) { //遍历oneSubjectList集合
                //得到oneSubjectList每个eduSubject对象
                Subject eduSubject = oneSubjectList.get(i);
                //把eduSubject里面值获取出来,放到OneSubject对象里面
                OneSubject oneSubject = new OneSubject();
//            oneSubject.setId(eduSubject.getId());
//            oneSubject.setTitle(eduSubject.getTitle());
                //eduSubject值复制到对应oneSubject对象里面
                BeanUtils.copyProperties(eduSubject,oneSubject);
                //多个OneSubject放到finalSubjectList里面
                finalSubjectList.add(oneSubject);

                //在一级分类循环遍历查询所有的二级分类
                //创建list集合封装每个一级分类的二级分类
                List<TwoSubject> twoFinalSubjectList = new ArrayList<>();
                //遍历二级分类list集合
                for (int m = 0; m < twoSubjectList.size(); m++) {
                    //获取每个二级分类
                    Subject tSubject = twoSubjectList.get(m);
                    //判断二级分类parentid和一级分类id是否一样
                    if(tSubject.getParentId().equals(eduSubject.getId())) {
                        //把tSubject值复制到TwoSubject里面,放到twoFinalSubjectList里面
                        TwoSubject twoSubject = new TwoSubject();
                        BeanUtils.copyProperties(tSubject,twoSubject);
                        twoFinalSubjectList.add(twoSubject);
                    }
                }
                //把一级下面所有二级分类放到一级分类里面
                oneSubject.setChildren(twoFinalSubjectList);
            }
            return finalSubjectList;
        }

5 我想说一下采用此方法的好处,此方法减少了对数据库的操作,并且容易理解,但是如果是对于多级分类查询的话,还是建议用递归的方法

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值