实现效果:

  

java级联调用 java级联查询_分页

 数据库设计:

  

java级联调用 java级联查询_分页_02

模拟数据展示:把superior设置成父节点的id,如果没有父级id直接给定固定值,例如:0

 

java级联调用 java级联查询_分页_03

MyBatis查询:

  

<!--找下级-->
    <select id="getchildren" resultType="com.speedchina.ch.gcxm.server.domain.base.PageData" parameterType="String">
        select id,name,short,cycle,instructions from jdjdxx where superior = #{supID} order by number
    </select>

 

 Servic层递归查询:第一次调用时直接传个0,也就是一级列表的superior字段,查到后循环自己调用自己,用查到的父级id去替换成superior,

再次查询,直到递归查询结束

@Override
    public PageData getMenu(String supID) {
        //查询所有当前节点
        List<PageData> children = progressNodeMapper.getchildren(supID);
        if (ListUtiles.isNotEmpty(children)) {
            for (PageData child : children) {
                //当前节点id为supID
                PageData pd = getMenu(child.getString("id"));
                child.put("children",pd.get("data"));
            }
        }
        pageDataResult = GetResult.selectSuccess();
        pageDataResult.put("data",children);
        return pageDataResult;
    }

  带分页的级联查询(只做到按最上级的分页):可以显示级联列表详情

  

@Override
    public PageData getMenuList(String supID, Integer pageSize, Integer pageNum) {
            PageHelper.startPage(pageNum,pageSize);
            //查询所有当前节点
            List<PageData> children = progressNodeMapper.getchildren(supID);
            PageInfo<PageData> PageInfo = new PageInfo<>(children);
            //对数据进行判空
            if (ListUtiles.isNotEmpty(PageInfo.getList())) {
                //放入查询结果
                for (PageData child : PageInfo.getList()) {
                    //当前节点id为supID  这里再调用自己会对子级列表再次分页,调用上面的无分页的递归
                    PageData pd = getMenu(child.getString("id"));
                    child.put("children",pd.get("data"));
                }
            }
        pageDataResult = GetResult.selectSuccess();
        pageDataResult.put("data",PageInfo);
        return pageDataResult;
    }