1、实体类代码
package com.baidu.entity;
import java.util.ArrayList;
import java.util.List;
public class Tier{
/**
* 节点id
*/
private Integer nodeId;
/**
* 节点名称
*/
private String nodeName;
/**
* 父节点id
*/
private Integer parentId;
/**
* 当前节点状态,0:已删除,1:未删除
*/
private String state;
/**
* 存放子节点的集合
*/
private List<Tier> child = new ArrayList<>();
public List<Tier> getChild() {
return child;
}
public void setChild(List<Tier> child) {
this.child = child;
}
public Integer getNodeId() {
return nodeId;
}
public void setNodeId(Integer nodeId) {
this.nodeId = nodeId;
}
public String getNodeName() {
return nodeName;
}
public void setNodeName(String nodeName) {
this.nodeName = nodeName;
}
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
2、mapper中SQL语句编写
<resultMap id="map" type="com.baidu.entity.Tier">
<id column="NODE_ID" property="nodeId"/>
<id column="NODE_NAME" property="nodeName"/>
<id column="PARENT_ID" property="parentId"/>
<id column="STATE" property="state"/>
</resultMap>
<select id="findAll" resultMap="map">
select * from tier
</select>
3、service实现类代码
package com.baidu.service.impl;
import com.baidu.entity.Tier;
import com.baidu.mapper.TierMapper;
import com.baidu.service.TierService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@Service
public class TireServiceImpl implements TierService {
@Autowired
TierMapper tierMapper;
@Override
public List<Tier> findAll() {
return tierMapper.findAll();
}
@Override
public List<Tier> buildDeptTreeSelect(List<Tier> tiers) {
List<Tier> returnList = new ArrayList<>();
//存放每一个节点的节点id
List<Integer> tempList = new ArrayList<>();
for(Tier tier: tiers){
tempList.add(tier.getNodeId());
}
for (Iterator<Tier> iterator = tiers.iterator(); iterator.hasNext();){
Tier tier = (Tier) iterator.next();
//如果tempList中包含当前tier的父级id,
if (!tempList.contains(tier.getParentId())){
recursionFn(tiers, tier);
returnList.add(tier);
}
}
if (returnList.isEmpty()){
returnList = tiers;
}
return returnList;
}
private void recursionFn(List<Tier> tiers, Tier tier) {
List<Tier> childList = getChildList(tiers, tier);
tier.setChild(childList);
for (Tier child: childList){
if (hasChild(tiers, child)){
recursionFn(tiers, child);
}
}
}
private boolean hasChild(List<Tier> tiers, Tier child) {
return getChildList(tiers, child).size() > 0 ? true : false;
}
private List<Tier> getChildList(List<Tier> tiers, Tier tier) {
List<Tier> list = new ArrayList<>();
Iterator<Tier> iterator = tiers.iterator();
while (iterator.hasNext()){
Tier t = (Tier) iterator.next();
if (t.getParentId() != null && t.getParentId() == tier.getNodeId()){
list.add(t);
}
}
return list;
}
}
4、controller调用
@ResponseBody
@RequestMapping("/tier")
public JsonData findAll(){
List<Tier> tierslist = tierService.findAll();
return JsonData.buildSuc(tierService.buildDeptTreeSelect(tierslist));
}
5、结果图
这篇博客目的只是为了记录实现过程,以便以后遇到了参照,没有其他目的,如果有错还请指出