JAVA树状结构数据处理
文章目錄
- 前言
- 一、數據庫中的結構
- 二、查詢步驟
- 1.XML
- 2.VO
- 3.樹中插入葉子
- 總結
前言
在工作中遇到需要對樹狀結構的數據進行一個處理,通過本文做出一個分享和總結。本文對數據的查詢主要是通過MyBatis在xml文件中使用resultMap標簽來實現對數據的循環查詢,并且通過返回值映射到VO中,通過VO中set方法的處理直接生成一個樹狀對象。
一、數據庫中的結構
要處理的對象在數據庫中大致是這樣的格式,并未用到一個記錄父級完整路徑的一個鍵。
例如:
若數據庫中加了一個用來記錄父級id的一個鍵,要查詢二級分類及二級分類的所有下級分類則只需要對parent_order這個鍵進行模糊查詢即可。
二、查詢步驟
項目結構都差不多就不在這里贅述了,直接mapper類對應xml中的sql語句直接調用就是了。
1.XML
代碼如下(示例):(下列代碼只作參考,我沒跑過的不一定對,大致結構是沒有錯的)
<resultMap id="studyMainTree" type="com.cataloguemanage.business.entity.AVO"><result column="id" property="id" javaType="String"/><result column="parentId" property="parentId" javaType="String"/><result column="name" property="name" javaType="String"/> <collection column="id" property="children" select="getChildrenByPid"ofType="com.cataloguemanage.business.entity.AVO"/></resultMap><select id="queryClassify" resultMap="studyMainTree">SELECTid ,parent_id parentId ,name FROM tableA WHERE parent_id ='0'</select><select id="getChildrenByPid" resultMap="studyMainTree">SELECTid ,parent_id parentId ,name FROM tableB WHERE parent_id =#{id} </select>queryClassify就是這個級聯查詢的入口 queryClassify執行一次 getChildrenByPid執行多次
2.VO
代碼如下(示例):聯系上圖中的AVO,使用AVO來接受查詢到的數據
@Data public class AVO {private String id;private String name;private String parentId;public List<AVO> getChildren() {return children;}public void setChildren(List<CatalogClassifyVO> children) {if (children!= null && !children.isEmpty()) {//相應的業務邏輯this.children=children;}}//子分類private List<AVO> children; }在VO中我們能通過在set方法中添加相應的業務邏輯,比如統計子分類的數量、整合某些字段等等,但所生成的樹對象是單向的,只能從父找到子。父與子的聯系都在setChildren方法中,并且是以類似遞歸一樣從最下級的set方法開始執行。
3.樹中插入葉子
在resultMap中再添加一個collection,并在VO中添加接受對應對象的成員。能實現對不同數據結構的對象進行查詢,并組合成一個樹狀結構。
XML
VO
private List<BVO> resource =new ArrayList<>();public void setResource(List<BVO> resource) {if(resource !=null&&!resource.isEmpty()){this.resource.addAll(resource);}}總結
用映射來處理樹狀結構的數據是非常清晰的,不需要查詢出所有數據來用多個for循環來進行遍歷和數據組裝。使用級聯查詢還是非常靈活的,例如能攜帶多個參數到子查詢中實現樹的模糊查詢、在set方法中將所有的子整合成一個集合等等。在級聯過程中,只有一個SqlSession,所以說在絕大部門情況下,使用級聯查詢樹狀結構的數據是比在代碼中用遞歸的方式查詢效率要高。
第一次做分享,有問題請見諒。
企鵝:747870530
總結
以上是生活随笔為你收集整理的JAVA树状结构数据处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 教你如何更好的编写JAVA单元测试
- 下一篇: 2022年武汉大学计算机考研复试分数线