java父節(jié)點(diǎn)遞歸代碼 js父節(jié)點(diǎn)

java1.8使用mybaitis連接mysql遞歸查詢所有父節(jié)點(diǎn)用到:和@報(bào)錯(cuò)Cause: java.util.NoSuchElementException

Java mysql mybatis批量更新數(shù)據(jù)庫(kù),采用以下寫(xiě)法即可執(zhí)行,但是數(shù)據(jù)庫(kù)連接必須配置:allowMultiQueries=true

“專業(yè)、務(wù)實(shí)、高效、創(chuàng)新、把客戶的事當(dāng)成自己的事”是我們每一個(gè)人一直以來(lái)堅(jiān)持追求的企業(yè)文化。 成都創(chuàng)新互聯(lián)是您可以信賴的網(wǎng)站建設(shè)服務(wù)商、專業(yè)的互聯(lián)網(wǎng)服務(wù)提供商! 專注于網(wǎng)站建設(shè)、成都做網(wǎng)站、軟件開(kāi)發(fā)、設(shè)計(jì)服務(wù)業(yè)務(wù)。我們始終堅(jiān)持以客戶需求為導(dǎo)向,結(jié)合用戶體驗(yàn)與視覺(jué)傳達(dá),提供有針對(duì)性的項(xiàng)目解決方案,提供專業(yè)性的建議,創(chuàng)新互聯(lián)建站將不斷地超越自我,追逐市場(chǎng),引領(lǐng)市場(chǎng)!

例如:jdbc:mysql://192.168.1.236:3306/test?useUnicode=trueamp;characterEncoding=UTF-8allowMultiQueries=true

update?id="batchUpdate"??parameterType="java.util.List"

foreach?collection="list"?item="item"?index="index"?open=""?close=""?separator=";"

update?test?

set

test=${item.test}+1

/set

where?id?=?${item.id}

/foreach

/update

MyBatis是支持普通SQL查詢,存儲(chǔ)過(guò)程和高級(jí)映射的優(yōu)秀持久層框架。MyBatis消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及結(jié)果集的檢索。MyBatis使用簡(jiǎn)單的XML或注解用于配置和原始映射,將接口和Java的POJOs(Plan Old Java Objects,普通的Java對(duì)象)映射成數(shù)據(jù)庫(kù)中的記錄.

java如何給有層級(jí)關(guān)系的JSON字符串做遞歸處理

先遞歸出一個(gè) node對(duì)象,再將node對(duì)象轉(zhuǎn)換成json串。直接進(jìn)行字符串的json操作不建議。

class Node{

private String id;

private String parentId;

private ListNode children;

public void addChildren(Node child){

getChildren().add(child);

}

public ListNode getChildren();

public String transformTojson(Node node ,StringBuffer jsonStr){

//遞歸

if(jsonStr ==null){

StringBuffer jsonStr=new ();

}

if(node.id!=null){

//拼接父節(jié)點(diǎn)json串

jsonStr.append(id:node.id,children:#children);

}

List childNodeList = node.getChildren();

StringBuffer childrenSB = new();

for( Node node :childNodeList){

childrenSB=transformTojson(node);

}

sonStr.replaceFirst("#children",childrenSB);

return jsonStr;

}

}

偽代碼大概這樣。

transformTojson方法可以不自己寫(xiě),直接使用第三方工具jar包的json轉(zhuǎn)化方法,比如gjson。

java的遞歸查詢?cè)趺磳?xiě)

原文在這里,寫(xiě)得不錯(cuò),樓主可參考下,具體鏈接如下,我只是搬運(yùn)工!

/**?

*?說(shuō)明方法描述:將list轉(zhuǎn)為樹(shù)tree結(jié)構(gòu)?

*??

*?@param?allRrecords?

*?@return?

*?@time?2016年5月10日?下午6:00:35?

*?@author?yangdong?

*/??

public?ListRecord?useListRecordToTree(ListRecord?allRrecords)?{??

ListRecord?listParentRecord?=?new?ArrayListRecord();??

ListRecord?listNotParentRecord?=?new?ArrayListRecord();??

//?第一步:遍歷allRrecords保存所有數(shù)據(jù)的uuid用于判斷是不是根節(jié)點(diǎn)??

MapString,?String?mapAllUuid?=?new?HashMapString,?String();??

MapString,?Record?allRecordMap?=?new?HashMapString,?Record();??

for?(Record?record?:?allRrecords)?{??

mapAllUuid.put(record.getStr("uuid"),?record.getStr("uuid"));??

allRecordMap.put(record.getStr("uuid"),?record);??

}??

//?第二步:遍歷allRrecords找出所有的根節(jié)點(diǎn)和非根節(jié)點(diǎn)??

if?(allRrecords?!=?null??allRrecords.size()??0)?{??

for?(Record?record?:?allRrecords)?{??

if?(StringUtil.isBlank(record.getStr("parent_uuid"))??

||?!mapAllUuid.containsKey(record.getStr("parent_uuid")))?{??

listParentRecord.add(record);??

}?else?{??

listNotParentRecord.add(record);??

}??

}??

}??

//?第三步:?遞歸獲取所有子節(jié)點(diǎn)??

if?(listParentRecord.size()??0)?{??

for?(Record?record?:?listParentRecord)?{??

//?添加所有子級(jí)??

record.set("childs",?this.getTreeChildRecord(listNotParentRecord,?record.getStr("uuid")));??

}??

}??

return?listParentRecord;??

}??

/**?

*?說(shuō)明方法描述:使list轉(zhuǎn)換為樹(shù)并根據(jù)關(guān)鍵字和節(jié)點(diǎn)名稱過(guò)濾?

*??

*?@param?allRecords?所有節(jié)點(diǎn)?

*?@param?keywords?要過(guò)濾的關(guān)鍵字?

*?@param?filterFields?要過(guò)濾的字段?

*?@return?

*?@time?2016年5月19日?下午3:27:32?

*?@author?yangdong?

*/??

public?ListRecord?useListRecordToTreeByKeywords(ListRecord?allRecords,?String?keywords,?String...?filterFields)?{??

ListRecord?listRecord?=?new?ArrayListRecord();??

MapString,?Record?allRecordMap?=?new?HashMapString,?Record();??

for?(Record?record?:?allRecords)?{??

allRecordMap.put(record.getStr("uuid"),?record);??

}??

//?遍歷allRrecords找出所有的nodeName和關(guān)鍵字keywords相關(guān)的數(shù)據(jù)??

if?(allRecords?!=?null??allRecords.size()??0)?{??

if?(filterFields.length??1)?{??

for?(Record?record?:?allRecords)?{??

for?(String?field?:?filterFields)?{??

//?比較??

if?(record.getStr(field).toLowerCase().indexOf(keywords.toLowerCase())?!=?-1)?{??

listRecord.add(record);??

}??

}??

}??

}?else?{??

for?(Record?record?:?allRecords)?{??

//?比較??

if?(record.getStr(filterFields[0]).toLowerCase().indexOf(keywords.toLowerCase())?!=?-1)?{??

listRecord.add(record);??

}??

}??

}??

}??

//?查找過(guò)濾出來(lái)的節(jié)點(diǎn)和他們的父節(jié)點(diǎn)??

listRecord?=?this.getSelfAndTheirParentRecord(listRecord,?new?ArrayListRecord(),??

new?HashMapString,?Record(),?allRecordMap);??

//?將過(guò)濾出來(lái)的數(shù)據(jù)變成樹(shù)tree結(jié)構(gòu)??

listRecord?=?this.useListRecordToTree(listRecord);??

return?listRecord;??

}??

/**?

*?說(shuō)明方法描述:遞歸查詢子節(jié)點(diǎn)?

*??

*?@param?childList?子節(jié)點(diǎn)?

*?@param?parentUuid?父節(jié)點(diǎn)id?

*?@return?

*?@time?2016年5月10日?下午3:29:35?

*?@author?yangdong?

*/??

private?ListRecord?getTreeChildRecord(ListRecord?childList,?String?parentUuid)?{??

ListRecord?listParentRecord?=?new?ArrayListRecord();??

ListRecord?listNotParentRecord?=?new?ArrayListRecord();??

//?遍歷tmpList,找出所有的根節(jié)點(diǎn)和非根節(jié)點(diǎn)??

if?(childList?!=?null??childList.size()??0)?{??

for?(Record?record?:?childList)?{??

//?對(duì)比找出父節(jié)點(diǎn)??

if?(StringUtil.equals(record.getStr("parent_uuid"),?parentUuid))?{??

listParentRecord.add(record);??

}?else?{??

listNotParentRecord.add(record);??

}??

}??

}??

//?查詢子節(jié)點(diǎn)??

if?(listParentRecord.size()??0)?{??

for?(Record?record?:?listParentRecord)?{??

//?遞歸查詢子節(jié)點(diǎn)??

record.set("childs",?getTreeChildRecord(listNotParentRecord,?record.getStr("uuid")));??

}??

}??

return?listParentRecord;??

}??

/**?

*?說(shuō)明方法描述:遞歸找出本節(jié)點(diǎn)和他們的父節(jié)點(diǎn)?

*??

*?@param?parentList?根據(jù)關(guān)鍵字過(guò)濾出來(lái)的相關(guān)節(jié)點(diǎn)的父節(jié)點(diǎn)?

*?@param?resultList?返回的過(guò)濾出來(lái)的節(jié)點(diǎn)?

*?@param?filterRecordMap?已經(jīng)過(guò)濾出來(lái)的節(jié)點(diǎn)?

*?@param?allRecordMap?所有節(jié)點(diǎn)?

*?@return?

*?@time?2016年5月19日?上午9:53:56?

*?@author?yangdong?

*/??

private?ListRecord?getSelfAndTheirParentRecord(ListRecord?parentList,?ListRecord?resultList,??

MapString,?Record?filterRecordMap,??

MapString,?Record?allRecordMap)?{??

//?當(dāng)父節(jié)點(diǎn)為null或者節(jié)點(diǎn)數(shù)量為0時(shí)返回結(jié)果,退出遞歸??

if?(parentList?==?null?||?parentList.size()?==?0)?{??

return?resultList;??

}??

//?重新創(chuàng)建父節(jié)點(diǎn)集合??

ListRecord?listParentRecord?=?new?ArrayListRecord();??

//?遍歷已經(jīng)過(guò)濾出來(lái)的節(jié)點(diǎn)??

for?(Record?record?:?parentList)?{??

String?uuid?=?record.getStr("uuid");??

String?parent_uuid?=?record.getStr("parent_uuid");??

//?如果已經(jīng)過(guò)濾出來(lái)的節(jié)點(diǎn)不存在則添加到list中??

if?(!filterRecordMap.containsKey(uuid))?{??

listParentRecord.add(record);//?添加到父節(jié)點(diǎn)中??

filterRecordMap.put(uuid,?record);//?添加到已過(guò)濾的map中??

allRecordMap.remove(uuid);//?移除集合中相應(yīng)的元素??

resultList.add(record);//?添加到結(jié)果集中??

}??

//?找出本節(jié)點(diǎn)的父節(jié)點(diǎn)并添加到listParentRecord父節(jié)點(diǎn)集合中,并移除集合中相應(yīng)的元素??

if?(StringUtil.isNotBlank(parent_uuid))?{??

Record?parentRecord?=?allRecordMap.get(parent_uuid);??

if?(parentRecord?!=?null)?{??

listParentRecord.add(parentRecord);??

allRecordMap.remove(parent_uuid);??

}??

}??

}??

//?遞歸調(diào)用??

getSelfAndTheirParentRecord(listParentRecord,?resultList,?filterRecordMap,?allRecordMap);??

return?resultList;??

}??

[java]?view?plain?copy

//示例??

[java]?view?plain?copy

/**?

*?說(shuō)明方法描述:遞歸查詢所有權(quán)限?

*??

*?@param?keyword?

*?@param?is_deleted?

*?@return?

*?@time?2016年5月10日?下午3:47:50?

*?@author?yangdong?

*/??

public?ListRecord?getRecordByKeywordRecursive(String?keyword,?String?is_deleted)?{??

//?第一步:查詢所有的數(shù)據(jù)??

StringBuffer?sql?=?new?StringBuffer(??

"?select?pa.uuid,pa.parent_uuid,pa.author_code,pa.author_name,pa.is_menu,pa.sort_number,pa.is_enable,pa.menu_icon?");??

sql.append("??from?s_author?pa");??

ListObject?params?=?new?ArrayListObject();??

sql.append("?where??pa.is_deleted=??");??

params.add(is_deleted);??

sql.append("?order?by?pa.sort_number?asc?");??

ListRecord?allRrecords?=?Db.use(AppConst.DB_DATASOURCE_MAIN).find(sql.toString(),?ParamUtil.listToArray(params));??

[java]?view?plain?copy

//第二步:將list變?yōu)闃?shù)tree結(jié)構(gòu)??

if?(StringUtil.isNotBlank(keyword))?{??

return?super.useListRecordToTreeByKeywords(allRrecords,?keyword,?"author_name");??

}?else?{??

return?super.useListRecordToTree(allRrecords);??

}??

}

java 找到一節(jié)點(diǎn)的所有子節(jié)點(diǎn) 是不是得遞歸實(shí)現(xiàn)?

2L誰(shuí)說(shuō)必須用遞歸的,只是遞歸寫(xiě)起來(lái)簡(jiǎn)單罷了,迭代的方法一樣OK;

深度優(yōu)先或者廣度優(yōu)先都可以

LZ的問(wèn)題用迭代的方法可以這樣解決:

1。把當(dāng)前節(jié)點(diǎn)(需要查找字節(jié)點(diǎn)的節(jié)點(diǎn))壓入一個(gè)堆棧,這步是初始化;

2。從堆棧中彈出一個(gè)節(jié)點(diǎn),如果該節(jié)點(diǎn)是葉子節(jié)點(diǎn),則這條路已經(jīng)走不通了,如果是非葉子節(jié)點(diǎn),那就把這個(gè)節(jié)點(diǎn)的所有子節(jié)點(diǎn)壓入堆棧

3。重復(fù)第二步直到堆棧為空

上面三步就能遍歷當(dāng)前節(jié)點(diǎn)的所有字節(jié)點(diǎn)

遞歸的話:

f(node){

for(遍歷node的所有子節(jié)點(diǎn)){

child=當(dāng)前子節(jié)點(diǎn)

if(child為葉子節(jié)點(diǎn)){

..return

;}

else{

f(child)

}

}

}

本文題目:java父節(jié)點(diǎn)遞歸代碼 js父節(jié)點(diǎn)
URL分享:http://muchs.cn/article42/dohsjhc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)用戶體驗(yàn)外貿(mào)網(wǎng)站建設(shè)、商城網(wǎng)站、軟件開(kāi)發(fā)網(wǎng)站設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化