数据库中树形列表(以easyui的tree为例)
构造一棵easyui前台框架的一个树形列表为例后台框架是spring MVC+JPA。
先看一下数据库是怎么建的,怎么存放的数据

下面是实体类
/**
* 部门类 用户所属部门(这里的部门是一个相对抽象的词)
* 使用前缀编码,每级增加三个数字,如:第一级 001,第二级001001,第三级001001001
* @author Administrator
*
*/
@Entity
public class Department { private String id; //部门id
private String pid; //父id
private String text; //部门名称
private List<Department> children; //用于存储子节点
@Id
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
} public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
@OneToMany
public List<Department> getChildren() {
return children;
}
public void setChildren(List<Department> children) {
this.children = children;
} }
由于使用的是easyui ,为了树可以正确显示,必须包含属性id和text。
下面是控制类,用于读取数据库中的数据,生成一个List,该list返回到前台时会转成json格式的数据,重点需要理解的就是getTree()和buildTree()这两个方法,通过递归生成这棵树,基本实现原理是遍历树的某一层,获取每个节点的子节点们(一个list),然后将它作为父节点的一个属性set进去
@Controller
@RequestMapping("/department")
public class DepartmentController { private static final String DEPARTEMNTMANAGE = "module/jsp/system/departmentManage.jsp"; @Resource(name="departmentServiceImpl")
private DepartmentService departmentService;
/**
* 获取部门管理页面.
* @return
*/
@RequestMapping("/getPage.do")
public String getUserManagePage(){
return DEPARTEMNTMANAGE;
} /**
* 获取部门树形列表
*/
@RequestMapping(value = "/getTree.do", method = RequestMethod.POST)
@ResponseBody //此注解表明返回值跳过视图处理部分,直接写入 http response body中
public List<Department> getTree(){
List<Department> root = departmentService.findById("0"); //获取根节点(获取的值存到list中)
net.sf.json.JSONArray jsonArray = net.sf.json.JSONArray.fromObject(buildTree(root));
System.out.println(jsonArray.toString()); return buildTree(root);
}
public List<Department> buildTree(List<Department> root){
for(int i=0;i<root.size();i++){
List<Department> children = departmentService.findByPid(root.get(i).getId()); //查询某节点的子节点(获取的是list)
buildTree(children);
root.get(i).setChildren(children);
}
return root;
} }
这里用查询的方法findById和findByPid是基于spring data JPA的方法,下面是相关类:
public interface DepartmentDao extends Repository<Department, Integer>{
public List<Department> findByPid(String pid);
public List<Department> findById(String id);
}
public interface DepartmentService {
public List<Department> findByPid(String pid);
public List<Department> findById(String id);
}
@Service("departmentServiceImpl")
public class DepartmentServiceImpl implements DepartmentService{
@Autowired
private DepartmentDao departmentDao;
@Override
public List<Department> findByPid(String pid) {
return departmentDao.findByPid(pid);
}
@Override
public List<Department> findById(String id) {
return departmentDao.findById(id);
}
}
前台调用如下
$(function(){
$('#tt').tree({
url: 'department/getTree.do',
loadFilter: function(data){
if (data.d){
return data.d;
} else {
return data;
}
}
});
});
这是后台返回给前台一个如下的json格式的数据:
[
{
"children": [
{
"children": [
{
"children": [],
"id": "001001",
"pid": "001",
"text": "部门一"
},
{
"children": [],
"id": "001002",
"pid": "001",
"text": "部门二"
}
],
"id": "001",
"pid": "0",
"text": "一分公司"
},
{
"children": [
{
"children": [],
"id": "002001",
"pid": "002",
"text": "部门一"
},
{
"children": [],
"id": "002002",
"pid": "002",
"text": "部门二"
}
],
"id": "002",
"pid": "0",
"text": "二分公司"
},
{
"children": [],
"id": "003",
"pid": "0",
"text": "三分公司"
}
],
"id": "0",
"pid": "-1",
"text": "总公司"
}
]
在页面上如下显示:

数据库中树形列表(以easyui的tree为例)的更多相关文章
- 如何将数据库中存的树转化为树形列表(以easyui的tree为例)
很多时候,我们会把一棵树存放到数据库中,当前台需要展示一个树形列表时,将这棵树读取出来并显示,这个过程是怎么实现的呢? 这篇文章是以构造一棵easyui前台框架的一个树形列表为例,后台框架是sprin ...
- EasyUI动态显示后台数据库中的数据
最近在完成一个项目,采用SSM框架搭建完成,前端使用EasyUI搭建页面: 其中涉及到一个查询显示功能:查询数据库中的数据,动态显示在页面之中,刚开始这部分十分有疑问,所以虚心向同学学习,现总结至博客 ...
- JSP列表形式显示数据库中的数据 OracleCachedRowSet 实例
现在数据库中有一张用户表,希望用户在jsp页面中输入用户名和密码以及 用户类型,在servlet中插入数据库后,在另一个jsp页面中把数据库中所有的用户名和类型都以列表的形式列出来 可以用Ora ...
- 【MySQL疑难杂症】如何将树形结构存储在数据库中(方案一、Adjacency List)
今天来看看一个比较头疼的问题,如何在数据库中存储树形结构呢? 像mysql这样的关系型数据库,比较适合存储一些类似表格的扁平化数据,但是遇到像树形结构这样有深度的人,就很难驾驭了. 举个栗子:现在有一 ...
- 在Bootstrap开发框架中使用bootstrapTable表格插件和jstree树形列表插件时候,对树列表条件和查询条件的处理
在我Boostrap框架中,很多地方需要使用bootstrapTable表格插件和jstree树形列表插件来共同构建一个比较常见的查询界面,bootstrapTable表格插件主要用来实现数据的分页和 ...
- Excel-返回列表或数据库中的分类汇总(汇总可以实现要还是不要统计隐藏行功能) subtotal()
SUBTOTAL函数 函数名称:SUBTOTAL 主要功能:返回列表或数据库中的分类汇总. 使用格式:SUBTOTAL(function_num, ref1, ref2, ...) 参数说明:Func ...
- C# Winform中的ComboBox控件绑定数据库项目作为列表内容
//初始化院区下拉列表,使用了Oracle数据库中的表项目 try { //string connString = "User=system;Password=manager;Data So ...
- Ajax-ajax实例3-动态树形列表
项目结构: 项目演示: 技术要点: 1.3.2 技术要点在基本原理的介绍中,了解到通过在父节点内动态创建子节点,并利用样式表缩进完成树形列表的基本框架.除了这一点外,还有下面一些问题需要考虑.1 .将 ...
- Web中树形数据(层级关系数据)的实现—以行政区树为例
在Web开发中常常遇到树形数据的操作,如菜单.组织机构.行政区(省.市.县)等具有层级关系的数据. 以下以行政区为例说明树形数据(层级关系数据)的存储以及实现,效果如图所看到的. 1 数据库表结构设计 ...
随机推荐
- 关于开启.NET在线提升教育培训的通知! - 可在此页面观看在线直播!
年前在线公开课程通知: 近期在开启VIP课程,隔天讲一次,年前其它时间插空讲公开课,主题:设计模式系列 1:培训 - 大概不会讲的内容: 1:不讲系列. 2:不讲入门. 3:不讲我不懂的! 2:培训 ...
- [C#] 软硬结合第二篇——酷我音乐盒的逆天玩法
1.灵感来源: LZ是纯宅男,一天从早上8:00起一直要呆在电脑旁到晚上12:00左右吧~平时也没人来闲聊几句,刷空间暑假也没啥动态,听音乐吧...~有些确实不好听,于是就不得不打断手头的工作去点击下 ...
- Docker 第一篇--初识docker
已经多年不写博客, 看完<晓松奇谈>最后一期猛然觉醒, 决定仔细梳理下自己这几年的知识脉络. 既然决定写, 那么首先就从最近2年热门的开源项目Docker开始.Docker 这两年在国内很 ...
- Oracle数据库该如何着手优化一个SQL
这是个终极问题,因为优化本身的复杂性实在是难以总结的,很多时候优化的方法并不是用到了什么高深莫测的技术,而只是一个思想意识层面的差异,而这些都很可能连带导致性能表现上的巨大差异. 所以有时候我们应该先 ...
- jQuery的属性
The Write Less , Do More ! jQuery的属性 1. attr(name|properties|key,value|fn) : 设置或返回被选元素的属性值 ①获取属性 < ...
- 代码的坏味道(22)——不完美的库类(Incomplete Library Class)
坏味道--不完美的库类(Incomplete Library Class) 特征 当一个类库已经不能满足实际需要时,你就不得不改变这个库(如果这个库是只读的,那就没辙了). 问题原因 许多编程技术都建 ...
- JavaWeb——ServletContext
一.基本概念 说起ServletContext,一些人会产生误解,以为一个servlet对应一个ServletContext.其实不是这样的,事实是一个web应用对应一个ServletContext, ...
- .Net语言 APP开发平台——Smobiler学习日志:手机应用的TextTabBar快速实现方式
参考页面: http://www.yuanjiaocheng.net/webapi/create-crud-api-1-put.html http://www.yuanjiaocheng.net/we ...
- ASP.NET MVC学习之母版页和自定义控件的使用
一.母板页_Layout.cshtml类似于传统WebForm中的.master文件,起到页面整体框架重用的目地1.母板页代码预览 <!DOCTYPE html> <html> ...
- Mysql - 数据库操作
之前介绍了数据库的增删改查, 发现忘记了数据库的一些基本操作, 比如建库, 建表, 改表等等. 那这里就来小结一下数据库sql形式的基本操作. 一.库操作 1. 建库 在建库之前, 可能需要看一下, ...