MyBatis-plus实现树形结构展示
一、无分页树形结构展示
- 实体类
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;
}
- 业务类
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;
}
}
- 控制器类
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();
}
}
二、分页树形结构展示
- 实体类
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;
}
- 业务类
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);
}
}
}
- 控制器
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);
}
}