1. 程式人生 > >從mysql查詢機構表用java解析成機構樹

從mysql查詢機構表用java解析成機構樹

資料庫表:
這裡寫圖片描述

對應實體:

@Entity
@Table(name = "t_sys_org")
public class SysOrgDTO {
    private Long id;
    private String name;  
    private Long parentId;

    @Transient
    private List<SysOrgDTO> childOrg = new ArrayList<SysOrgDTO>();   
}

Controller層:

@RestController
@RequestMapping
("/api/sys/org") public class OrgController extends BaseController{ @Autowired private OrgBO orgBO; /** *機構樹 * @param orgId * @return */ @RequestMapping(value = "/getOrgTree",method = RequestMethod.GET) @ApiOperation(value = "機構樹",notes="機構樹") @ApiImplicitParams({ @ApiImplicitParam
(name = "orgId",value = "機構id",dataType = "Long",paramType = "query") }) @ApiResponses(value = {@ApiResponse(code = 200,message = "機構樹")}) public JsonMessage<String> getOrgTree(@RequestParam(value = "orgId",required = false) Long orgId){ return JsonMessage.successed(JsonUtil.toDefaultJSONString(orgBO.generateTreeNode(orgId),SysOrgDTO.getDefaultJsonFilter())); } }

Service層:

@Service
public class OrgBO {
    @Autowired
    private SysOrgBO sysOrgBO;

    /**
     * 生成機構樹
     * @param rootId
     * @return
     */
    public List<SysOrgDTO> generateTreeNode(Long rootId){
        List<SysOrgDTO> root = new ArrayList<SysOrgDTO>();
        if (rootId != null){
            //找到所有一級機構
            root = sysOrgBO.findAll(new NumberCondition("id",rootId,NumberCondition.Handler.EQUAL));
        }else {
            root = sysOrgBO.findAll(new NumberCondition("parentId",0,NumberCondition.Handler.EQUAL));
        }
        //為一級機構設定子機構
        for(SysOrgDTO org:root){
            org.setChildOrg(getChildNode(org.getId()));
        }
        return root;
    }

    /**
     * 根據父id查詢所有子機構
     * @param nodeId
     * @return
     */
    public List<SysOrgDTO> getChildNode(Long nodeId){
        //根據父id查詢子機構
        List<SysOrgDTO> childNodeList = sysOrgBO.findAll(new NumberCondition("parentId",nodeId,NumberCondition.Handler.EQUAL));
        //子機構下的子機構
        for(SysOrgDTO org:childNodeList){
            org.setChildOrg(getChildNode(org.getId()));//遞迴
        }
        if (childNodeList.size() == 0){
            return null;
        }
        return childNodeList;
    }
 }

這樣返回的是一個list集合。

相關推薦

mysql查詢機構java解析機構

資料庫表: 對應實體: @Entity @Table(name = "t_sys_org") public class SysOrgDTO { private Long id;

Mysql查詢的結果,寫入txt檔案中,每個欄位|分隔,下一條資料要換行

1.首先建立檔案 public static boolean createFile(String fileName, List<?> dtoList, Class<?> clazz, String path) { logger.debug("createF

mysql 查詢

時間 name log 了吧 不能 tro ble code 邏輯 1)使用情景“判斷通過後寫入數據庫”,這個一般是不會有問題的, 但並發訪問的時候就不太好搞。因為寫入(insert)是需要時間的,假設現在有兩個並發請求,(假設第一個訪問是最後一個符合條件的寫入請求,按照邏

Navicatmysql導完整(包括結構與其中數據)到另一臺機器的mysql

網上 操作 數據表 tail 研究 新的 完成 新建 文件 碰到一個需要把數據表從本地mysql導入到服務器的mysql中的問題,在網上搜了下,沒有發現說的很清楚的操作,很多操作都是利用命令行來實現,自己研究了一下,發現Navicat有自己的導入導出功能,可以比較容易的實現

mysql查詢哪個資料量最大

use information_schema;select table_name,table_rows from tables where table_schema='cargo_new' order by table_rows desc limit 3 -- cargo_new (選擇資料庫)

mysql查詢資料庫

使用sql語句查詢mysql指定表字段。 可以方便整理資料庫表的說明文件。 我在工作中整理了部分sql作為記錄。 可以用在以後的mysql文件匯出工具裡。 以下為具體內容:  使用sql查詢指定資料庫表名和表說明。 SELECT TABLE_NAME as tabl

使用MySQL查詢一個的多列資料資訊,其中一列使用Max(),存在的坑

1、背景:查詢資料庫表資料,根據指定條件篩選出滿足條件的資料,此例返回滿足條件的兩條資料 2、需求:想在滿足條件的多條資料中篩選出其中fversion列值最大對應的完整記錄 3、實現:  3.1、在指定欄位上使用Max(),產生問題-造成查詢的資料錯亂,返回的資訊只有fversion列值滿足條件,f

mybatis+springmvc出現無法mysql查詢中文資料問題

之前簡單弄一個從資料庫查詢的jsp頁面發現查詢中文資料時報編碼錯誤,簡單來說解決方法有幾種: 一.資料庫連線問題 我用的是jdbc.properties,正確的url: jdbc.url=jdbc:mysql://localhost:3306/db_studen

詳細步驟!!!idea+springboot+mybatis+jsp+bootstrap實現mysql查詢出資料並顯示(原始碼)

實現效果: 資料庫對應資料: 開發環境: IntelliJ IDEA 2017.2.5 x64 java version "1.8.0_151" x64 mysql 6.0.11-alpha-community x64 步驟: 1.建立工程: file--new-

一個JAVA解析Excel的程式舉例

實體類 public class ali { private String FSTR_SCATSID; private String FSTR_DESC; private String FSTR_DATE; private String NUM_TI

一個JAVA解析TXT格式文字文件的程式舉例

實體類 package txt; public class AliDataRecord { private String FSTR_SCATSID; private String FSTR_DESC; private String FSTR_DATE;

MySQL 查詢一個中存在,卻不在另外一個中存在的資料

介紹我瞭解的兩種方法:(1) NOT IN ,簡單易懂,相對效率低:SELECT DISTINCT A.ID FROM A WHERE A.ID NOT IN (SELECT ID FROM B)(2)速度快,效率高,但是邏輯理解有點複雜:SELECT * FROM B WH

MYSQL查詢A不在B中的記錄

A表的NAME欄位和B表的NAME欄位相同,查詢  A表中NAME項不在B表中的NAME項的記錄。 select name from A where name not in (select name from B) 或者 select A.NAME from A l

mysql查詢一個中欄位相同的資料

SELECT * FROM `education_student_tmp_from_crp` a WHERE (a.stu_no) IN ( SELECT stu_no FROM

mysql 批量修改中欄位資料不同的值 一個更新另一個的方法

首先mysql更新資料的某個欄位,一般這樣寫: UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value'; 也可以這樣用in指定要更新的記錄: UPDATE mytable SET myfield = 'value

Jvm之java解析class檔案

前言: 身為一個java程式設計師,怎麼能不瞭解JVM呢,倘若想學習JVM,那就又必須要了解Class檔案,Class之於虛擬機器,就如魚之於水,虛擬機器因為Class而有了生命。《深入理解java虛擬機器》中花了一整個章節來講解Class檔案,可是看完後,一直都還是迷

mysql 查詢使用join on和使用子查詢in的比較

有兩個表 promotion_full_reduction base_user_favorite_item 現在要查詢使用者收藏的商品中參加促銷了的商品個數,有兩種寫法,一種是使用in子查詢: SELECT COUNT(1) FROM pr

mysql查詢一個自增主鍵的下一個主鍵值:

Mysql的INFORMATION_SCHEMA資料庫包含了一些表和檢視,提供了訪問資料庫元資料的方式。 元資料是關於資料的資料,如資料庫名或表名,列的資料型別,或訪問許可權等。有些時候用於表述該資訊的其他術語包括“資料詞典”和“系統目錄”。 下面對一些重要的資料字典表做一些說明:SCHEMATA表:提供了關

MySQL查詢資料庫是否存在

SELECT COUNT(1) FROM information_schema.tables WHERE table_schema='shihou_event' AND table_name = tableName information_schema資料庫是MySQL自

linuxjava解析html出現中文亂碼問題

一,用java解析html文件遇到的問題 在windows環境下用BufferedReader讀取utf-8的html檔案時,沒有任何亂碼問題,但是在linux環境下讀取的時候就出現亂碼了,不知道什麼問題引起的。 後來用FileInputStream讀取,用new Str