java实现树状数据
来源:互联网 发布:四度空间软件 编辑:程序博客网 时间:2024/05/16 04:55
sql
CREATE TABLE `OT_MAIL_LIST_GROUP` (`FLOW_ID` varchar(32) NOT NULL COMMENT '主键' ,`GROUP_NAME` varchar(32) NOT NULL COMMENT '分组名' ,`PARENT_ID` varchar(32) NOT NULL COMMENT '父级组' ,`CREATE_USER_ID` varchar(32) NOT NULL COMMENT '创建中ID' ,`CREATE_TIME` datetime NULL COMMENT '创建时间' ,`MODIFY_USER_ID` varchar(36) NULL COMMENT '修改者ID' ,`MODIFY_TIME` datetime NULL COMMENT '修改时间' ,`LHD` int NOT NULL COMMENT '左ID,方便查询数据' ,`RHD` int NOT NULL COMMENT '右ID,方便查询数据',PRIMARY KEY (`FLOW_ID`) );
数据库实体类
package com.cdsf.egov.oa.maillist.domain;import java.util.Date;/** * 通讯录分组表 * @author tanbowei * */public class MListGroup {/**主键*/private String flowId;/**分组名字*/private String groupName;/**父级ID*/private String parentId;/**用户ID*/private String createUserId;/**创建时间*/private Date createTime;/**修改者ID*/private String modifyUserId;/**修改时间*/private Date modifyTime;/**左ID*/private int LHD;/**右ID*/private int RHD;public String getFlowId() {return flowId;}public void setFlowId(String flowId) {this.flowId = flowId;}public String getGroupName() {return groupName;}public void setGroupName(String groupName) {this.groupName = groupName;}public String getParentId() {return parentId;}public void setParentId(String parentId) {this.parentId = parentId;}public String getCreateUserId() {return createUserId;}public void setCreateUserId(String createUserId) {this.createUserId = createUserId;}public Date getCreateTime() {return createTime;}public void setCreateTime(Date createTime) {this.createTime = createTime;}public String getModifyUserId() {return modifyUserId;}public void setModifyUserId(String modifyUserId) {this.modifyUserId = modifyUserId;}public Date getModifyTime() {return modifyTime;}public void setModifyTime(Date modifyTime) {this.modifyTime = modifyTime;}public int getLHD() {return LHD;}public void setLHD(int lHD) {LHD = lHD;}public int getRHD() {return RHD;}public void setRHD(int rHD) {RHD = rHD;}}
树形数据封装类
package com.cdsf.egov.oa.maillist.domain;import java.util.List;public class TreeMList {/**分组ID*/private String id;/**分组名字*/private String text;/**父级ID*/private String parentId;/**子集合*/private List<TreeMList> childrenList;/**是否拥有子集合*/private boolean hasChildren;/**子集合类型*/private int type =1;public int getType() {return type;}public void setType(int type) {this.type = type;}public boolean isHasChildren() {return hasChildren;}public void setHasChildren(boolean hasChildren) {this.hasChildren = hasChildren;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getText() {return text;}public void setText(String text) {this.text = text;}public String getParentId() {return parentId;}public void setParentId(String parentId) {this.parentId = parentId;}public List<TreeMList> getChildrenList() {return childrenList;}public void setChildrenList(List<TreeMList> childrenList) {this.childrenList = childrenList;}}实现方案1
此方案是通过每次用户传入的节点ID来实现树状,每次查询只查询当前传入ID的子节点
public List<?> listGroup(Map<String, String> map) {MListGroup mg = new MListGroup();//要实现树的分组数据mg.setCreateUserId(currentUser().id().toString());//设置当前用户的IDif(map.get("id")!=null){//判断是否有接收参数(参数为选中的树节点ID)mg.setFlowId(map.get("id"));将父节点ID作为子节点的父ID来查询}else{mg.setFlowId(currentUser().id().toString());本系统默认用当前用户的id作为一级根节点的ID}if(!s_Parent(mg)){//判断是否拥有子分组addGroup_s();//为没有分组的用户添加默认分组}List<MListGroup> list = (List<MListGroup>) lMapper.listGroup(mg);//接收数据层查询出来的数据List<TreeMList> lm = new ArrayList<TreeMList>();TreeMList tm1 = new TreeMList();for (MListGroup mg1 : list) {TreeMList tm = new TreeMList();tm.setText(mg1.getGroupName());tm.setId(mg1.getFlowId());tm.setParentId(mg1.getParentId());tm.setHasChildren(s_Parent(mg1));lm.add(tm);}tm1.setChildrenList(lm);return tm1.getChildrenList();}/** * 为没有分组的用户添加默认分组 */ public void addGroup_s(){ MListGroup mg = new MListGroup(); mg.setFlowId(Tools.createUUID()); mg.setParentId(currentUser().id().toString()); mg.setGroupName("我的通讯录"); mg.setLHD(1); mg.setRHD(2); mg.setCreateTime(new Date()); mg.setCreateUserId(currentUser().id().toString()); mg.setModifyTime(new Date()); mg.setModifyUserId(currentUser().id().toString()); lMapper.addGroup(mg); }<p></p>/** * 判断是否拥有子分组 * @param mg * @return */ public boolean s_Parent(MListGroup mg){ return lMapper.s_Parent(mg)>0?true:false; }
方案2
此方案实现原理 为 一次性将所有的树都查询出来,没有二次查询
@Overridepublic List<?> listGroup(Map<String, String> map) {MListGroup mg = new MListGroup();mg.setCreateUserId(currentUser().id().toString());if(map.get("id")!=null){mg.setFlowId(map.get("id"));}else{mg.setFlowId(currentUser().id().toString());}if(!s_Parent(mg)){addGroup_s();}List<MListGroup> list = (List<MListGroup>) lMapper.listGroup(mg);List<TreeMList> lm = new ArrayList<TreeMList>();TreeMList tm1 = new TreeMList();for (MListGroup mg1 : list) {TreeMList tm = new TreeMList();tm.setText(mg1.getGroupName());tm.setId(mg1.getFlowId());tm.setParentId(mg1.getParentId());tm.setHasChildren(s_Parent(mg1));tm.setChildrenList(treeGroup(mg1));//调用递归方法lm.add(tm);}tm1.setChildrenList(lm);return tm1.getChildrenList();}/** * 为没有分组的用户添加默认分组 */public void addGroup_s(){MListGroup mg = new MListGroup();mg.setFlowId(Tools.createUUID());mg.setParentId(currentUser().id().toString());mg.setGroupName("我的通讯录");mg.setLHD(1);mg.setRHD(2);mg.setCreateTime(new Date());mg.setCreateUserId(currentUser().id().toString());mg.setModifyTime(new Date());mg.setModifyUserId(currentUser().id().toString());lMapper.addGroup(mg);//lMapper.addGroup(mg);}/** * 递归所有的分组 * @param mg * @return */public List<TreeMList> treeGroup(MListGroup mg){List<MListGroup> list = (List<MListGroup>) lMapper.listGroup(mg);//接收数据层查询出来的数据List<TreeMList> lm = new ArrayList<TreeMList>();for (MListGroup mg1 : list) {TreeMList tm = new TreeMList();List<TreeMList> tm2 =new ArrayList<TreeMList>();tm.setText(mg1.getGroupName());tm.setId(mg1.getFlowId());tm.setParentId(mg1.getParentId());tm.setHasChildren(s_Parent(mg1));if(s_Parent(mg1)){//如果循环到的节点拥有子节点,继续调用当前方法递归tm2 = treeGroup(mg1);}tm.setChildrenList(tm2);lm.add(tm);}return lm;}/** * 判断是否拥有子分组 * @param mg * @return */public boolean s_Parent(MListGroup mg){return lMapper.s_Parent(mg)>0?true:false;}
1 0
- java实现树状数据
- java实现树状分布。
- Java - 树状结构数据解析
- 用java实现树状图
- Java递归实现树状结构
- Django模板实现树状数据渲染
- 级联数据的树状存储结构HashMap实现
- ztree+java后台取数据(包括异步)生成树状图
- ztree+java后台取数据(包括异步)生成树状图
- ztree+java后台取数据(包括异步)生成树状图
- java将树状结构数据通过map分级(一种思路)
- 增强版JAVA实现文本形式的树状结构显示
- 用Java实现文本形式的树状结构显示
- 用JAVA实现文本形式的树状结构显示
- 增强版JAVA实现文本形式的树状结构显示
- 用java实现文本形式的树状结构显示
- 用JAVA实现文本形式的树状结构显示
- 用JAVA实现文本形式的树状结构显示代码
- 职场上个人价值的三个驱动力
- js基础巩固之--数组的声明与操作
- Redis的持久化--RDB的工作原理及引发的问题
- struts2中耦合访问servlet- API
- noip2011提高组——计算系数
- java实现树状数据
- 使用Allegro绘制PCB板——器件的摆放
- 程序员必备的代码审查(Code Review)清单
- noip2011提高组——聪明的质检员
- 使用Allegro绘制PCB板——网络表的导入
- 2240Arbitrage——poj
- 使用Allegro绘制PCB板——手工创建电路板
- Android NDK开发入门-访问Java中的域
- PCI卡的PCB布线规则