直接查询出树状数据结构-Java
1、表结构:一个简单的组织架构表,子父级的形式,直接查询出树状结构返回给前端人员

2、实体类+Vo:直接使用实体类会出现问题,因为是需要直接返回对应的树状结构。
package com.lee.pojo;import com.baomidou.mybatisplus.annotation.TableName;import java.io.Serializable;/*** @author XMLee* @date 2022/4/15 17:32* 实体类*/
@TableName("organization")
public class Organization implements Serializable {private Integer id;private String organizationName;private Integer parentId;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getOrganizationName() {return organizationName;}public void setOrganizationName(String organizationName) {this.organizationName = organizationName;}public Integer getParentId() {return parentId;}public void setParentId(Integer parentId) {this.parentId = parentId;}
}
==============================================分割线====================================================================
package com.lee.Vo;import java.io.Serializable;
import java.util.List;/*** @author XMLee* @date 2022/4/15 17:32* VO*/
public class OrganizationVo implements Serializable {private Integer id;private String organizationName;private Integer parentId;private List<OrganizationVo> children;public Integer getId() {return id;}public List<OrganizationVo> getChildren() {return children;}public void setChildren(List<OrganizationVo> children) {this.children = children;}public void setId(Integer id) {this.id = id;}public String getOrganizationName() {return organizationName;}public void setOrganizationName(String organizationName) {this.organizationName = organizationName;}public Integer getParentId() {return parentId;}public void setParentId(Integer parentId) {this.parentId = parentId;}
}
3、业务层
package com.lee.service.impl;import com.lee.Vo.OrganizationVo;
import com.lee.mapper.OrganizationMapper;
import com.lee.pojo.Organization;
import com.lee.service.OrganizationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;/*** @author XMLee* @date 2022/4/15 17:40*/
@Service
public class OrganizationServiceImpl implements OrganizationService {@Autowiredprivate OrganizationMapper organizationMapper;@Overridepublic List<OrganizationVo> findByTree() {//查询出所有的部门-->可以直接写SQL,用对应的Vo去接收就可以了List<Organization> organizationList = organizationMapper.selectList(null);//将部门转换成VoList<OrganizationVo> organizationVoList = organizationList.stream().map((organization) -> {OrganizationVo vo = new OrganizationVo();vo.setId(organization.getId());vo.setOrganizationName(organization.getOrganizationName());vo.setParentId(organization.getParentId());return vo;}).collect(Collectors.toList());//使用filter去进行拦截,进行判断List<OrganizationVo> organizationVos = organizationVoList.stream().filter(organizationVo -> 0 == organizationVo.getParentId()).peek(organizationVo -> organizationVo.setChildren(createChildList(organizationVo, organizationVoList))).sorted(Comparator.comparing(OrganizationVo::getId)).collect(Collectors.toList());return organizationVos;}/*** @param organizationVo 父级* @param organizationVoList 对应的list* @return*/private static List<OrganizationVo> createChildList(OrganizationVo organizationVo, List<OrganizationVo> organizationVoList) {return organizationVoList.stream().filter(model -> organizationVo.getId().equals(model.getParentId())).peek(model -> model.setChildren(createChildList(model, organizationVoList))).sorted((Comparator.comparing(OrganizationVo::getId))).collect(Collectors.toList());}}
4、总结
使用这种方式,就可以将数据直接返回成树状结构的

5、同样树状结构数据,但是没有要求返回树状结构,可以根据一层一层的返回,我们便可以使用如下方式
@Override
public List<Organization> getOrganizations(Integer parentId) {QueryWrapper<Organization> queryWrapper = new QueryWrapper<>();if (parentId == null) {queryWrapper.eq("parent_id", 0);return organizationMapper.selectList(queryWrapper);}queryWrapper.eq("parent_id", parentId);return organizationMapper.selectList(queryWrapper);
}



本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
