日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA树状结构数据处理

發布時間:2023/12/29 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

<resultMap id="resourceList" type="com.cataloguemanage.business.entity.AVO"><result column="classifyCode" property="classifyCode" javaType="String"/><collection column="classifyCode" property="children" select="selectCatalogueChildren"ofType="com.cataloguemanage.business.entity.AVO"/><collection column="classifyCode" property="resource" select="selectResourceByresourceCode"ofType="java.util.Map"/></resultMap><select id="selectCatalogueInfo" resultMap="resourceList">SELECTa.classify_code classifyCodefromtable awherea.classify_code=#{classifyCode} </select><select id="selectCatalogueChildren" resultMap="resourceList">SELECTa.classify_code classifyCodefromcatalog_classify aWHEREa.parent_id=#{classifyCode} </select><select id="selectResourceByResourceCode" resultType="java.util.Map">selectb.resource_code resourceCode,b.resource_name labelfrom tableA a left join tableB bon b.resource_code = a.resource_classify_codewhere and a.classify_code = #{classifyCode}</select>

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树状结构数据处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。