java如何實現(xiàn)樹形查詢
java實現(xiàn)樹形查詢
首先這個樹形查詢,你肯定不能用他內(nèi)置sql語句吧
這里我自己在dao層寫一句sql語句進(jìn)行查詢
@Query(value = "select * from TB_UIM_MENU_TEST t START WITH t.PID IS NULL" + " CONNECT BY PRIOR t.ID = t.PID order by t.PID NULLS first,t.MENU_SORT ASC",nativeQuery = true) List<MenuTestDTO> findTree();
這里我寫的原生sql語句,不原生的俺也不會。
接下來就要實現(xiàn)樹形查詢了
service層代碼我就不po出來了,直接po實現(xiàn)層的代碼:
public List findTree() { List<MenuTreeVO> list = new ArrayList<>(); List<MenuTestDTO> dataList = menuTestDAO.findTree(); List<MenuTreeVO> resultList = new ArrayList<>(); for (int i = 0; i < dataList.size(); i++) { MenuTestDTO menuTestDTO = dataList.get(i); MenuTreeVO menuTreeVO = new MenuTreeVO(); menuTreeVO.setId(menuTestDTO.getId()); menuTreeVO.setPid(menuTestDTO.getPid()); menuTreeVO.setLockState(menuTestDTO.getLockState()); menuTreeVO.setLogo(menuTestDTO.getLogo()); menuTreeVO.setMenuSort(menuTestDTO.getMenuSort()); menuTreeVO.setName(menuTestDTO.getName()); menuTreeVO.setRoute(menuTestDTO.getMenuRoute()); resultList.add(menuTreeVO); } for (int i = 0; i < resultList.size(); i++) { MenuTreeVO menuTreeVO = resultList.get(i); if (menuTreeVO.getPid() == null){ //一級節(jié)點(diǎn) list.add(menuTreeVO); }else { //子節(jié)點(diǎn) findFather(menuTreeVO,list); } } return list; }
到這里有人就要問了,你怎么知道不同子級對應(yīng)的父級是哪個啊,問得好!
在上述方法中有一個方法是findFather()這個就是進(jìn)行父級尋找的方法,數(shù)據(jù)庫里肯定是有關(guān)系的,
下面看看這個findFather()方法
private List findFather(MenuTreeVO private List findFather(MenuTreeVO menuTreeVO,List list){ for (int i = 0; i < list.size(); i++) { MenuTreeVO menuvo = list.get(i); //判斷是否為對應(yīng)節(jié)點(diǎn)的子節(jié)點(diǎn) if (menuvo.getId().equals(menuTreeVO.getPid())){ menuvo.getChildren().add(menuTreeVO); } } return null; }
像我這里表中是有PID和ID的區(qū)別,
子級的PID和父級的ID是一樣的,而父級的PID是空的,所以第一個判斷使用ID進(jìn)行判斷,
如果ID為空那就是父級,把他取出來存在一個List當(dāng)中,你得先聲明空的集合奧,類似于漢諾塔那樣。
然后通過ID和PID的關(guān)系再去找子級,需要說的一點(diǎn)是,
我這里用的是域?qū)ο筠D(zhuǎn)換,自己封裝了一下,這個VO中有這么一個元素:
private List<MenuTreeVO> children = new ArrayList<>();
我只能說DDDD,這就是用來存子級的list對象。
大概差不多就是這個意思,自己理解一下就行。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Mybatis中的config.xml配置文件詳細(xì)解析
這篇文章主要介紹了詳解Mybatis-config.xml配置文件,需要的朋友可以參考下2017-12-12