家族谱树形数据结构实现
简单的家族谱编辑展示
数据库的表结构设计
每一个家族谱的节点都有一个parentid 对应的父节点,和一个手机号码,通过手机号码以及人物的psid就能准备的定位这个人物在哪张家族谱中以及位置。
这个项目算是一个比较老的项目了。 后端用的struts2+Hibernate 配置也比较繁琐,前端是jsp+vue。
下面是具体的功能实现
家族谱对象
MemoryFamilyTree
@Entity @Table(name = "memory_family_tree", schema = "dbo", catalog = "smf") public class MemoryFamilyTree implements Serializable {@Id@Column(name = "id", unique = true, nullable = false, length = 50)private String id;@Column(name = "psid", length = 500)private String psId;@Column(name = "level", length = 500)private Integer level;@Column(name = "parent_id", length = 500)private String parentId;@Column(name = "creator", length = 500)private String creator;@Column(name = "creator_name", length = 500)private String creatorName;@Column(name = "create_time", length = 500)private String createTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());@Column(name = "mobile", length = 500)private String mobile;@Column(name = "status", length = 500)private Integer status;@Column(name = "ext1", length = 500)private String ext1;@Column(name = "ext2", length = 500)private String ext2;@Column(name = "ext3", length = 500)private String ext3;@Column(name = "ext4", length = 500)private String ext4;@Column(name = "ext5", length = 500)private String ext5;//配偶Id@Column(name = "mate_id", length = 500)private String mateId;//家族谱根节点人物首字母@Column(name = "root_initial", length = 500)private String rootInitial;//封装配偶信息@Transientprivate MemoryPerson memoryPersonMate;@Transient//忽略这个字段private List<MemoryFamilyTree> children;
这个是接口方法
Object objId = request.getParameter("id"); Object objMobile = request.getParameter("mobile"); String hql = null; MemoryFamilyTree memoryFamilyTree = null; List list = null; if(objId == null||StringUtils.isBlank(objId.toString())) {// status:状态:0-未删除;1-已删除hql = "from MemoryFamilyTree where mobile like '%" + objMobile.toString() + "%' and parentId = '0' and status = 0";list = memoryFamilyTreeDao.getListByHQL(hql); }else if(objMobile == null || StringUtils.isBlank(objMobile.toString())) {// status:状态:0-未删除;1-已删除hql = "from MemoryFamilyTree where id = '" + objId.toString() + "' and status = 0";list = memoryFamilyTreeDao.getListByHQL(hql); }if(list.size() > 0) {memoryFamilyTree = (MemoryFamilyTree) list.get(0);//将查询出来的这个根节点传入递归查询出他所有的子类memoryFamilyTree = getChildNode(memoryFamilyTree); }resultMap.put("result", true); resultMap.put("memoryFamilyTree", memoryFamilyTree); writer.write(JSonUtil.obj2Json(resultMap));
//循环递归调用的方法
private MemoryFamilyTree getChildNode(MemoryFamilyTree memoryFamilyTree) {String parentId = memoryFamilyTree.getId();//获取这个人物的Mate_id;if(StringUtils.isNotEmpty(memoryFamilyTree.getMateId())){//查出纪念人物信息MemoryPerson memoryPerson = (MemoryPerson) memoryPersonDao.load(memoryFamilyTree.getMateId());memoryFamilyTree.setMemoryPersonMate(memoryPerson);}//用这个父节点,查询下面的所有子节点String hql = "from MemoryFamilyTree as u where u.parentId ='" + parentId + "'";List listByHQL = memoryFamilyTreeDao.getListByHQL(hql, null);if (listByHQL != null && listByHQL.size() > 0) {List<MemoryFamilyTree> memoryFamilyTrees = listByHQL;memoryFamilyTree.setChildren(memoryFamilyTrees);for (MemoryFamilyTree familyTree : memoryFamilyTrees) {getChildNode(familyTree);}}return memoryFamilyTree; }
将每一条记录都封装成为一个对象。通过根节点可以将子节点查询出来之后递归子节点下面的子节点。
将查询出来的每个字节点数据都存入家族谱对象的children字段 这个对象就是一个List<MemoryFamilyTree>
---------------------------------------------------------------------------------------------------------------------------------------------------------
记录一下! ~~
家族谱树形数据结构实现相关推荐
- 树形数据结构和扁平数据相互转换
树形数据结构: 树形数据结构是一类重要的非线性数据结构.树形数据结构可以表示数据表素之间一对多的关系.其中以树与二叉树最为常用,直观看来,树是以分支关系定义的层次结构.树形数据结构在客观世界中广泛存在 ...
- 家族谱管理系统(C语言版)
家族谱管理系统 一.本程序功能框架图 二 .系统功能 (1) 文件操作功能:记录输入.记录输出.初始化:用户可建立一个家族的族谱保存在文件中.在其后的操作中,可从文件里读取族谱信息.增加新的家族成员. ...
- 中国电子科技集团公司家族谱及信息
中国电子科技集团公司家族谱及信息(持续更新) 中电集团下属的研究所一直都是各大高校电磁场与微波专业的毕业生们就业选择的一大去向,今天看到射频百花潭的公众号发了中国电子科技集团公司家族族谱,想问下知友们 ...
- 树展示 移动端_一种手机端树形数据结构的展现方法与流程
本发明涉及数据结构的展现领域,尤其涉及一种手机端树形数据结构的展现方法. 背景技术: 在企业中,组织结构表现为部门.员工.职称等一种群体关系图,它形象的反映了企业内部各部门和员工上下左右之间的相互关系 ...
- C语言家族谱管理系统
C语言家族谱管理系统 1.家族谱建立 每个成员包含(姓名(关键字.不重复).性别.妻子.出生日期.死亡日期(可空)) 简化设计,使用二叉树表示,假定每个成员最多2个孩子 女儿的孩子不进家谱 2.家族谱 ...
- js树形数据结构的搜索功能或获取id
项目场景: js树形数据结构的搜索 描述: 根据搜索条件筛选树形数据 树形数据: var tree = [{id: '01',text: '广东省',children: [{id: '011',tex ...
- 数据结构家族谱问题(map)
出处:http://blog.csdn.net/strokess/article/details/50958958 人类学研究对于家族很感兴趣,于是研究人员搜集了一些家族的家谱进行研究.实验中,使用计 ...
- c语言二叉树族谱管理系统,数据结构课程设计报告(用二叉树实现家谱管理系统).doc...
数据结构课程设计 题目:用二叉树实现家谱管理系统 姓名:郭志超 学号:031010151554042 完成日期:2005.7.3 一.需求分析 ??建立输入文件以存放最初家谱中各成员的信息. ??成员 ...
- 3631. [JLOI2014]松鼠的新家【树形DP】
Description 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在"树&q ...
最新文章
- VTK:小部件之TexturedButtonWidget
- 第14课:动手实战中文命名实体提取
- 简单的Flash GUI工具(Simple Flash GUI Tool)
- 2021奢侈品营销启示录
- python使用技巧_python小技巧
- 拆 米家台灯_全网首拆:众筹价169元的米家屏幕挂灯拆解评测!柔光罩或成败笔...
- VxWorks 6.9 内核编程指导之读书笔记 -- VxWorks kernel application (一)
- jQuery UI 实现 仿购物车功能 简洁的js
- 编程之美之寻找发帖“水王” 的算法问题
- 【软件测试基础】文档测试
- 传递闭包c语言算法解析,找关系的传递闭包 用c语言编 一个关系的传递闭包
- JavaWeb学习笔记(2)-B站尚硅谷
- 网页视频下载mp4格式到本地
- [09-Dec-2012] 《少年pi的奇幻之旅》 -推荐
- iOS内嵌unity
- Lync 2010升级到Lync 2013 之设定企业联盟!
- silverlight4/5 修改源码实现 DataGrid 中文按拼音排序
- 我就是这样入门「机器学习」的
- kb981833补丁蓝屏报错 0x0000006b
- oracle服务自己停止工作,求救:ORACLE服务自动停止!
热门文章
- java怎么实现华为云文字识别,OCR文字识别服务快速入门教程
- linux看磁盘是sas还是sata吗,SAS和SATA硬盘傻傻分不清?看这里
- spark streamming + kafka + Redis 实践
- postgresql.conf bgwriter_lru_multiplier
- 数据分析之Excel篇(三):计算统计函数
- Android Junit 单元测试 Method wrap in org.json.JSONObject not mocked
- linux 网卡绑定解绑,网卡绑定开机绑定,关机解绑
- WEB下载数据量大的EXCEL解决方案
- 服务器光猫一直亮不响应,光猫光信号正常,且光猫和路由器都重启过,还是上不了网咋办?...
- 土巴兔CEO王国彬:这五点,决定了你事业的上限