MyBatis-plus实现树形结构展示并分页

该博客介绍了如何使用MyBatis-plus在Java中构建树形结构数据的展示,包括无分页和分页两种情况。首先展示了实体类SysOrgEntity和SysChapterEntity,接着详细解释了业务类和控制器类中的方法,如getTreeList()和queryPage(),用于获取树形结构的数据列表,并实现了递归查找子节点的功能。最后,控制器类提供RESTful API以树形结构返回数据。
摘要由CSDN通过智能技术生成

MyBatis-plus实现树形结构展示

一、无分页树形结构展示

  1. 实体类
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * @author Administrator
 */
@Data
@TableName("sys_org")
public class SysOrgEntity implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 组织id
     */
    @TableId
    private Long orgId;

    /**
     * 组织名称
     */
    private String name;

    /**
     * 组织父id
     */
    private Long parentId;

    /**
     * 父菜单名称
     */
    @TableField(exist=false)
    private String parentName;

    /**
     * 组织编号
     */
    private String orgNum;

    /**
     * 组织负责人
     */
    private String orgLeader;

    /**
     * 手机号
     */
    private String phone;  

    /**
     * ztree属性
     */
    @TableField(exist=false)
    private Boolean open;

    @TableField(exist=false)
    private List<?> list;
}
  1. 业务类
import com.baomidou.mybatisplus.extension.service.IService;
import com.virtual.modules.sys.entity.SysOrgEntity;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author Administrator
 */
public interface SysOrgService extends IService<SysOrgEntity> {
	
	 /**
     * 获取树的组织
     * @return
     */
    List<SysOrgEntity> getTreeList();
}


import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.virtual.common.utils.MapUtils;
import com.virtual.modules.sys.dao.SysOrgDao;
import com.virtual.modules.sys.entity.SysOrgEntity;
import com.virtual.modules.sys.service.SysOrgService;
import com.virtual.modules.sys.service.SysUserOrgService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

/**
 * @author Administrator
 */
@Service
public class SysOrgServiceImpl extends ServiceImpl<SysOrgDao, SysOrgEntity> implements SysOrgService {
	
	@Override
    public List<SysOrgEntity> getTreeList() {
        List<SysOrgEntity> list = this.list();
        if (list == null || list.size() <= 0){
            return null;
        }
        LinkedList<SysOrgEntity> linkedList = new LinkedList<>();
        list.forEach(orgEntity -> {
            if (orgEntity.getParentId() == 0){
                linkedList.add(orgEntity);
            }
        });
        linkedList.forEach(orgEntity -> {
            orgEntity.setList(getChildren(orgEntity.getOrgId(),list));
        });
        return linkedList;
    }

    private List<SysOrgEntity> getChildren(Long parentId, List<SysOrgEntity> orgList){
        //孩子集合
        LinkedList<SysOrgEntity> linkedList = new LinkedList<>();
        orgList.forEach(orgEntity -> {
            if (parentId.equals(orgEntity.getParentId())){
                linkedList.add(orgEntity);
            }
        });
        // 递归退出条件
        if (linkedList.size() == 0){
            return null;
        }
        // 把子菜单的子菜单再递归循环一遍
        linkedList.forEach(orgEntity -> {
            orgEntity.setList(getChildren(orgEntity.getOrgId(),orgList));
        });
        return linkedList;
    }

}
  1. 控制器类
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.virtual.modules.sys.entity.SysOrgEntity;
import com.virtual.modules.sys.service.SysOrgService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 1. @author Administrator
 */
@RestController
@RequestMapping("/sys/org")
public class SysOrgController extends AbstractController {
	
	 @Autowired
    private SysOrgService orgService;
		
	/**
     * 以树的形式返回
     * @return
     */
    @GetMapping("/tree")
    public List<SysOrgEntity> tree(){
        return orgService.getTreeList();
    }
}

二、分页树形结构展示

  1. 实体类
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * @author Administrator
 */
@Data
@TableName("sys_chapter")
public class SysChapterEntity implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 章节id
     */
    @TableId
    private Long chapterId;

    /**
     * 父id
     */
    private Long parentId;

    /**
     * 章节名称
     */
    private String chapterName;

    /**
     * 章节备注
     */
    private String remark;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 子集合
     */
    @TableField(exist = false)
    private List<?> list;

}
  1. 业务类
	import com.baomidou.mybatisplus.extension.service.IService;
import com.robot.common.utils.PageUtils;
import com.robot.modules.sys.entity.SysChapterEntity;

import java.util.Map;

/**
 * @author Administrator
 */
public interface SysChapterService extends IService<SysChapterEntity> {

    /**
     * 分页条件查询
     * @param params
     * @return
     */
    PageUtils queryPage(Map<String, Object> params);
}

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.robot.common.utils.PageUtils;
import com.robot.common.utils.Query;
import com.robot.modules.sys.dao.SysChapterDao;
import com.robot.modules.sys.entity.SysChapterEntity;
import com.robot.modules.sys.service.SysChapterService;
import org.springframework.stereotype.Service;

import java.util.LinkedList;
import java.util.List;
import java.util.Map;

/**
 * @author Administrator
 */
@Service
public class SysChapterServiceImpl extends ServiceImpl<SysChapterDao, SysChapterEntity> implements SysChapterService {

    /**
     * 条件分页查询
     * @param params
     * @return
     */
    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        IPage<SysChapterEntity> page = this.page(
                new Query<SysChapterEntity>().getPage(params),
                new QueryWrapper<SysChapterEntity>().eq("parent_id",0)
        );
        if (page != null && page.getRecords() != null && page.getRecords().size() > 0){
            List<SysChapterEntity> records = page.getRecords();
            records.forEach(this::findAllChild);
        }
        return new PageUtils(page);
    }

    private void findAllChild( SysChapterEntity chapterEntity ) {
        QueryWrapper<SysChapterEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("parent_id",chapterEntity.getChapterId());
        List<SysChapterEntity> chapterEntityList = this.list(queryWrapper);
        chapterEntity.setList(chapterEntityList);
        if (chapterEntityList != null && chapterEntityList.size() > 0){
            chapterEntityList.forEach(this::findAllChild);
        }
    }

}

  1. 控制器
import com.robot.common.utils.PageUtils;
import com.robot.common.utils.R;
import com.robot.modules.sys.service.SysChapterService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

/**
 * @author Administrator
 */
@RestController
@RequestMapping("/sys/chapter")
public class SysChapterController extends AbstractController {


    @Autowired
    private SysChapterService chapterService;

    /**
     * 条件分页查询
     * @param params
     * @return
     */
    @GetMapping("/list")
    @RequiresPermissions("sys:user:list")
    public R list(@RequestParam Map<String, Object> params){
        PageUtils page = chapterService.queryPage(params);
        return R.ok().put("page", page);
    }
}
  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值