三种方式:
1.查询所有数据后,自行封装树形数据
步骤如下:
1.查询所有数据,展示server层数据
这里是输入最高父节点,以及县级type
@Override
public List<CommonRegion> getTree() {
//查询所有数据
List<CommonRegion> allRegion = commonRegionDao.allList();
List<CommonRegion> regionTreeList = buildTree(allRegion,"500181403","1400");
return regionTreeList;
}
/**
* 构造父子级
*
* @param allRegion
* @param pid
* @return
type分类:省:1100 市1300 区1400
*/
public static List<CommonRegion> buildTree(List<CommonRegion> allRegion,String pid,String type) {
List<CommonRegion> regionTreeList = new ArrayList<>();
//获取省
if (type.equals("1100")) {
List<CommonRegion> regionList = allRegion.stream().filter(region -> region.getRegionType().equals("1100")).collect(Collectors.toList());
for (CommonRegion region : regionList) {
CommonRegion regionTree = new CommonRegion();
regionTree.setRegionId(region.getRegionId());
regionTree.setRegionName(region.getRegionName());
regionTree.setParRegionId(region.getParRegionId());
regionTreeList.add(regionTree);
}
} else if (type.equals("1300")) {
//获取省市
List<CommonRegion> regionList = allRegion.stream().filter(region -> region.getRegionType().equals("1100") || region.getRegionType().equals("1300")).collect(Collectors.toList());
for (CommonRegion region : regionList) {
CommonRegion regionTree = new CommonRegion();
if (Objects.equals(pid, region.getParRegionId())) {
regionTree.setRegionId(region.getRegionId());
regionTree.setRegionName(region.getRegionName());
regionTree.setChildren(buildTree(allRegion,region.getRegionId(),type));
regionTreeList.add(regionTree);
}
}
} else {
//获取省市区
for (CommonRegion region : allRegion) {
CommonRegion regionTree = new CommonRegion();
if (Objects.equals(pid, region.getParRegionId())) {
regionTree.setRegionId(region.getRegionId());
regionTree.setRegionName(region.getRegionName());
regionTree.setChildren(buildTree(allRegion,region.getRegionId(),type));
regionTreeList.add(regionTree);
}
}
}
return regionTreeList;
}
2.在mybatis之中循环调用sql语句(注意:会循环调用sql语句及数据库,不适用于数据量太大的时候)
<resultMap id="getSjcpInfoList" type="com.zqzt.pm.model.SupManager.Prodtype">
<id column="prod_type_id" property="prodTypeId" jdbcType="INTEGER" />
<result column="prod_type_name" property="prodTypeName" jdbcType="VARCHAR" />
<result column="up_prod_type_id" property="upProdTypeId" jdbcType="INTEGER" />
<result column="up_prod_type_name" property="upProdTypeName" jdbcType="VARCHAR" />
<collection property="children" ofType="com.zqzt.pm.model.SupManager.Prodtype" column="prod_type_id" select="selectListTree2"/>
</resultMap>
<select id="selectListTree1" resultMap="getSjcpInfoList">
select prod_type_id,prod_type_name ,up_prod_type_id,up_prod_type_name
from dim_prod_type where up_prod_type_id =-1
and status_cd='1000'
</select>
<select id="selectListTree2" resultMap="getSjcpInfoList">
select prod_type_id,prod_type_name ,up_prod_type_id,up_prod_type_name
from dim_prod_type where up_prod_type_id =#{id}
and status_cd='1000'
</select>
3.
1.在实体类中创建List<>children
2.查询所有数据
3.分装树形
/**
* 遍历组织,获取树形结构
*
* @param list
* @return
*/
private List<Group> toTreeList(List<Group> list) {
List<Group> nodeList = new ArrayList<>();
if (list == null || list.isEmpty()) {
return nodeList;
}
for (Group node1 : list) {
node1.setName(node1.getName());
if (!parseLevel(list, node1)) {
nodeList.add(node1);
}
}
return nodeList;
}
/**
* 组织层级转化
*
* @param list
* @param node1
* @return
*/
private boolean parseLevel(List<Group> list, Group node1) {
boolean mark = false;
for (Group node2 : list) {
if (node1.getParentId() != null && node1.getParentId().equals(node2.getRowId())) {
mark = true;
if (node2.getChildren() == null)
node2.setChildren(new ArrayList<>());
node2.getChildren().add(node1);
break;
}
}
return mark;
}