树状结构Java模型、层级关系Java模型、上下级关系Java模型与html页面展示

一、业务原型:公司的组织结构、传销关系网

二、数据库模型

很简单,创建 id 与 pid 关系即可。(pid:parent_id)

三、Java模型

(我们把这张网撒在html的一张表里。其实用ul来展示会简单N多,自己思考为什么LZ会选择放在表里)

private class Table {
        private Long id; // 当前对象的id
        private int x; // 横坐标
        private int y; // 纵坐标
        private List<Table> tables; // 当前对象的下级集合

public Table(Long id) {
            this.id = id; // 方便快速创建对象
        }
    }

1、组装Java模型数据

1)一次性从表里查出所有数据

2)创建下面的Map  

// pid 与 List<id> 上级ID与下级对象的对应关系
            Map<Long, List<Table>> psMap = new HashMap<>(); // 简单,不详细说明了

3)创建顶级节点

用顶级对象的ID new 一个Table,然后根据ID从上面的 psMap 取出它的下级给这个 Table 的 tables。

4)递归完成所有子级节点

循环Table对象的tables集合,重复上面一个步骤即可

5)计算每个Table对象的横(x)纵(y)坐标

这里再创建一个对象

private class Max {
                    private int x = 1; // 表的行 
                    private int y = 1; // 列
                }

    // 计算纵坐标
private void countY(List<Table> tables, int y, Max max) {
if (tables != null)
for (Table table : tables) {
table.y = y;
countY(table.tables, y + 1, max);
if (y > max.y)
max.y = y;
}
} // 计算横坐标
private void countX(List<Table> tables, int x, Max max) {
if (tables != null)
for (Table table : tables) {
table.x = max.x;
if (table.tables != null) {
max.x++;
}
countX(table.tables, max.x, max);
}
else
max.x = x + 1;
}

2、创建二维数组,对应html页面中要展示的表

T[][] ts = new T[max.x][max.y]; // T对应数据库表里的对象

上面的Java模型已经将每个对象的横(x)纵(y)坐标都算出来了,填充到这个二维数组即可

四、html页面展示

1、根据前面的Max对象画一个表格,标注坐标

2、用上面的二维数组填充表格

五、表格画好,接下来你可以不折手段了(这就是我不用ul的原因)

1、统计每行每列的数据

2、设置各种乱八七糟的样式

树状结构Java模型、层级关系Java模型、上下级关系Java模型与html页面展示的更多相关文章

  1. java集合树状结构及源码

    java集合树状结构及源码 最近一直想看一下java集合的源码,毕竟平时用的比较多,但总是感觉是跟着习惯new出来一个对象,比如ArrayList,HashMap等等,所以就简单的看了一下,了解了一下 ...

  2. 浅谈oracle树状结构层级查询之start with ....connect by prior、level及order by

    浅谈oracle树状结构层级查询 oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的,虽然我是一个java程序开发者,我一直觉得只 ...

  3. 浅谈oracle树状结构层级查询测试数据

    浅谈oracle树状结构层级查询 oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的,虽然我是一个java程序开发者,我一直觉得只 ...

  4. openerp学习笔记 对象间关系【多对一(一对一)、一对多(主细结构)、多对多关系、自关联关系(树状结构)】

    1.多对一(一对一)关系:采购单与供应商之间的关系 'partner_id':fields.many2one('res.partner', 'Supplier', required=True, sta ...

  5. Android无限级树状结构

    通过对ListView简单的扩展.再封装,即可实现无限层级的树控件TreeView. package cn.asiontang.nleveltreelistview; import android.a ...

  6. 由简入繁实现Jquery树状结构

    在项目中,我们经常会需要一些树状结构的样式来显示层级结构等,比如下图的样式,之前在学.net的时候可以直接拖个服务端控件过来直接使用非常方便.但是利用Jquery的一些插件,也是可以实现这些效果的,比 ...

  7. JQuery 树状结构 jQuery-treeview.js 插件

    由简入繁实现Jquery树状结构 在项目中,我们经常会需要一些树状结构的样式来显示层级结构等,比如下图的样式,之前在学.net的时候可以直接拖个服务端控件过来直接使用非常方便.但是利用Jquery的一 ...

  8. oracle存储过程删除树状结构的表数据

    今天在删除一个车辆品牌表的时候,遇到了一个问题,是在java的代码中做逻辑删除还是直接在Oracle中一次删除完成呢 思来想去觉得还是在sql里直接删除比较合适, 为什么呢? 第一,涉及数据库的读写操 ...

  9. 分享使用NPOI导出Excel树状结构的数据,如部门用户菜单权限

    大家都知道使用NPOI导出Excel格式数据 很简单,网上一搜,到处都有示例代码. 因为工作的关系,经常会有处理各种数据库数据的场景,其中处理Excel 数据导出,以备客户人员确认数据,场景很常见. ...

随机推荐

  1. sql 创建表、删除表 增加字段 删除字段操作

    下面是Sql Server 和 Access 操作数据库结构的常用Sql,希望对你有所帮助. 新建表:create table [表名]([自动编号字段] int IDENTITY (1,1) PRI ...

  2. POJ 3678 Katu Puzzle

    Description 给出一个关系,包括 And,Xor,Or 问是否存在解. Sol 经典的2-SAT问题. 把每个值看成两个点,一个点代表选 \(0\) ,另一个代表选 \(1\) . 首先来看 ...

  3. BZOJ 4723: [POI2017]Flappy Bird

    Description 从一个点到一条直线,每次纵坐标只能增加或减少1,有些位置有障碍,求最少增加步数. Sol 贪心. 或许是贪心吧...反正在可到达的范围内,纵坐标尽量小... 做的时候维护一下两 ...

  4. MySQL分库分表总结

    单库单表 单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到. 单库多表 随着用户数量的增加,user表的数据量会越来越大,当数 ...

  5. Entity Framework 与ORACLE ODP.Net 在vs2010下的稀奇古怪的问题

    不说废话 1.在vs2010数据源中看不到oracle odp.net 数据源,vs2008下可以看到,通过oraprocfg配置多次,重启多次,还是看不到,machine.config里面配置也正常 ...

  6. Openstack4j 在 Maven 中的构建

    什么是 Openstack4j ? OpenStack的官方SDK是基于Python语言的,对于Java程序猿来说,将Python翻译过来未免麻烦.在Openstack官方的Wiki中(戳我直达),我 ...

  7. LeetCode之100. Same Tree

    ------------------------------------------ 递归比较即可 AC代码: /** * Definition for a binary tree node. * p ...

  8. PHP获取当前url路径的函数及服务器变量:QUERY_STRING、REQUEST_URI、SCRIPT...

    1,$_SERVER["QUERY_STRING"]说明:查询(query)的字符串 2,$_SERVER["REQUEST_URI"]说明:访问此页面所需的U ...

  9. Pyqt 动态的添加控件

    Pyqt 动态的添加控件 # -*- coding: utf-8 -*- from PyQt4.QtCore import * from PyQt4.QtGui import * import sys ...

  10. ElasticSearch(站内搜索)

    简介 Elasticsearch是一个实时的分布式搜索和分析引擎.它可以帮助你用前所未有的速度去处理大规模数据.它可以用于全文搜索,结构化搜索以及分析,当然你也可以将这三者进行组合.Elasticse ...