查询树的时候可以使用mybatis的collection递归查询
public class OrgTree{
private String orgId;// 部门代码
private String orgName;// 部门中文名称
private List children;//
public String getOrgName() {
return orgName;
}
public void setOrgName(String orgName) {
this.orgName= orgName;
}
public String getOrgId() {
return orgId;
}
public void setOrgId(String orgId) {
this.orgId= orgId;
}
public List getChildren() {
return children;
}
public void setChildren(List children) {
this.children = children;
}
}
但这样数据量大的时候回比较慢
换成先查询所有,然后在java里进行转换
orgId,orgName,superiorId
实体
public class OrganizationRes {
private String orgId;// 部门代码
private String orgName;// 部门中文名称
private String superiorId;// 上级部门id
private List subordinateOrg;// 下属部门(对象集合)
public String getOrgId() {
return orgId;
}
public void setOrgId(String orgId) {
this.orgId = orgId;
}
public String getOrgName() {
return orgName;
}
public void setOrgName(String orgName) {
this.orgName = orgName;
}
public String getSuperiorId() {
return superiorId;
}
public void setSuperiorId(String superiorId) {
this.superiorId = superiorId;
}
}
public List getSubordinateOrg() {
return subordinateOrg;
}
public void setSubordinateOrg(List subordinateOrg) {
this.subordinateOrg = subordinateOrg;
}
/**
* 获取组织树
* @return
*/
public void getMiddleOrgTree(){
//获取组织架构树
List list=OrgDao.findAll();
List ztree= buildTreeByRecursive(list);
}
/**
* 使用递归方法建树
* @param treeNodes
* @return
*/
public List buildTreeByRecursive(List treeNodes) {
List trees = new ArrayList();
//遍历所有的
for (OrganizationRes treeNode : treeNodes) {
//如果为null则为最顶层节点
if (StringUtils.isEmpty(treeNode.getSuperiorId())) {
trees.add(findChildren(treeNode,treeNodes));
}
}
return trees;
}
/**
* 递归查找子节点
* @param parentNode 父节点
* @param treeNodes
* @return
*/
public OrganizationRes findChildren(OrganizationRes parentNode,List treeNodes) {
for (OrganizationRes it : treeNodes) {
//遍历到上级的id与某条数据的上级id一致时,证明该上级是这条数据的上级
if(parentNode.getOrgId().equals(it.getSuperiorId())) {
if (parentNode.getSubordinateOrg() == null) {
parentNode.setSubordinateOrg(new ArrayList());
}
//使用递归添加下级数据
parentNode.getSubordinateOrg().add(findChildren(it,treeNodes));
}
}
return parentNode;
}
另一种方式的树形式Ztree
/**
* checked:false
* id:"CTZ"
* orgid:"CTZ"
* orgname:"中国通周"
* pId:"0"
*/
@Override
public void getOrgZtree() {
List
根据组织id获取下级
/**
* 根据组织id获取下级
*/
@Override
public void getOrgZtreeByOrgCode() {
String orgid = "2530";
List> resultList = new ArrayList>();
List orgList = orgDao.findAll();
OrganizationRes organization=new OrganizationRes();
for (OrganizationRes organizationRes : orgList) {
if(orgid.equals(organizationRes.getOrgId())) {
BeanUtils.copyProperties(organizationRes, organization);
//递归查找子节点
findChildren(organization, orgList);
break;
}
}
this.buildOrgByRecursive(organization, resultList, new HashMap(),0);
}
/**
* 将组织树转换为list 符合ztree格式
* @param organization
* @param list
*/
public void buildOrgByRecursive(OrganizationRes organization,List> list, Map map,int index) {
map=new HashMap();
map.put("id", organization.getOrgId());
if(index>0) {
map.put("pId", organization.getSuperiorId());
}else {
map.put("pId", "0");
}
map.put("orgname", organization.getOrgName());
map.put("orgcode", organization.getOrgCode());
map.put("checked", true);
list.add(map);
List subList = organization.getSubordinateOrg();
if(subList!=null&&subList.size()>0) {
for (OrganizationRes organizationRes : subList) {
this.buildOrgByRecursive(organizationRes, list, map,1);
}
}
}
查询上级