java--关于树的数据库查询方法
来源:互联网 发布:教育信息化数据填报 编辑:程序博客网 时间:2024/05/20 06:27
本篇主要讲了关于一个表存放树的数据库表的查询方法:
利用JSON查询:
首先从数据库查询该表的所有信息:
public JSONArray fromatAll() { JSONArray jsonArray = new JSONArray(); List<Map<String,Object>> regList=jdbcTemplate.queryForList("select id,name ,father_id as parentId from bas_mediservicetype"); for(Map<String,Object> map:regList){ jsonArray.add(map); } return jsonArray; }
使用JSONArray对象递归遍历得到树:
public JSONArray treeMenuList(JSONArray menuList, int parentId) { JSONArray childMenu = new JSONArray(); for (Object object : menuList) { JSONObject jsonMenu = JSONObject.fromObject(object); int menuId = jsonMenu.getInt("id"); int pid = jsonMenu.getInt("parentId"); if (parentId == pid) { JSONArray c_node = treeMenuList(menuList, menuId); jsonMenu.put("nodes", c_node); childMenu.add(jsonMenu); } } return childMenu; }
最后调用:
JSONArray jsonArray = costItemervice.treeMenuList(this.costItemDao.fromatAll(), 0);
利用LIst和Map对象只查询叶子节点的信息:
//costItemService中实现:static List<Map<String,Object>> leafssList = new ArrayList<Map<String,Object>>();//该静态变量用于添加信息中的叶子节点 /** * 通过递归得到医疗服务分类信息中的叶子节点信息 * @param basMstList * @param parentId * @return */ public List<Map<String, Object>> leafList1(List<Map<String, Object>> basMstList, int parentId) { List leafsList = new ArrayList<>(); for (Map<String,Object> basMstMap : basMstList) { int menuId = Integer.parseInt(( basMstMap.get("id")).toString()); int pid = Integer.parseInt(( basMstMap.get("parentId")).toString()); if(parentId==pid){ List<Map<String, Object>> leafLis = leafList1(basMstList,menuId); if(leafLis.isEmpty()){ leafsList.add(basMstMap);//递归后返回值到leafLis后判断该节点后续节点是否有值,据此保存后续节点为空也就是叶子节点的信息 leafssList.add(basMstMap);//保存信息到静态变量中 } } } return leafsList; } /** * 返回信息叶子节点的信息 */ public List<Map<String, Object>> leafList (List<Map<String, Object>> basMstList, int parentId){ leafList1(basMstList,parentId); return leafssList; }//costItemDao中sql查询public List<Map<String, Object>> queryBasMediservicetype() { List<Map<String, Object>> basMstList = jdbcTemplate.queryForList("select id,name ,father_id as parentId from bas_mediservicetype"); return basMstList; }//调用:costItemService.leafList(costItemDao.queryBasMediservicetype(), 1)
测试显示成功,但是刷新页面之后,再次调用该方法时leafsslist不是重新定义而是接着在后面增加数据,static改成private错误一样。
然后我在方法中增加了一条remove语句
/** * 返回信息叶子节点的信息 */ public List<Map<String, Object>> leafList (List<Map<String, Object>> basMstList, int parentId){ leafssList.removeAll(leafssList); leafList1(basMstList,parentId); return leafssList; }
0 0
- java--关于树的数据库查询方法
- Mongo 关于时间的查询,数据库添加索引的方法
- oracle数据库中关于利用查询直接排名的方法
- 关于数据库查询的简化
- 关于数据库的优化查询
- 关于数据库的递归查询
- 关于数据库的链接查询
- 关于SQL数据库的查询
- 关于数据库的分页查询
- java数据库查询在网页上显示的简单方法
- 利用java反射创建通用的数据库查询方法
- 关于java的分页查询操作解析(本题只针对oracle数据库的分页查询)
- 查询纯真数据库的方法
- 数据库查询方法的进步
- 数据库查询优化的方法
- 数据库随机查询的方法
- 数据库分页查询的方法
- 数据库的查询,关于时间的情况
- 安卓动画——让控件停留在动画结束的位置
- Openwrt-搭建一个Git服务器
- IO流创建java文件列表
- NIO DirectByteBuffer 内存泄露的测试
- 探讨如何减少Linux服务器TIME_WAIT过多的问题
- java--关于树的数据库查询方法
- Spring ApplicationContextAware使用方法
- Win7下apache出现问题:“No services installed” || apache服务启动
- Dubbo源码分析系列1---Dubbo异步通信
- 聊聊程序员的积极性问题
- Java与C#语法不同点(C#转Java随笔-持续更新)
- Dubbo源码分析系列2---Dubbo异步通信
- Java实现几种常见排序方法
- 【转】Java Executor框架在多线程应用中的使用