需求:不要在資料庫層寫預存程序或者調用資料庫內建方法實現,因為資料庫有可能是MySQL或者是oracle。
核心遞迴代碼:
/** * @Description: 遞迴查詢機構 * @param @param departList * @param @param departId 設定檔案 * @return void 傳回型別 * @throws */private void getDepartmentList(List<SysDepartment> departList, Integer departId) {try {List<SysDepartment> list = departmentService.getDListByParentId(departId);if (null != list && list.size()>0) {for (int i = 0; i < list.size(); i++) {SysDepartment department = list.get(i);departList.add(department);getDepartmentList(departList, department.getDepartId());}}} catch (Exception e) {e.printStackTrace();}}
調用代碼:
List<SysDepartment> departList = departmentService.getDListByParentId(Integer.parseInt(departId));if (null != departList && departList.size() > 0) {SysDepartment department = departList.get(0);getDepartmentList(departList, department.getDepartId());returnCode = Const.RETURN_CODE_1;map.put("department", departList);}
SQL:
-- ------------------------------ Table structure for `SYS_DEPARTMENT`-- ----------------------------DROP TABLE IF EXISTS `SYS_DEPARTMENT`;CREATE TABLE `SYS_DEPARTMENT` ( `DEPART_ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '機構ID', `DEPART_NAME` varchar(20) DEFAULT NULL COMMENT '機構名稱', `PARRENT_ID` int(11) DEFAULT NULL COMMENT '上級ID', `DEPART_CODE` varchar(20) DEFAULT NULL, `DEPART_DESC` text, PRIMARY KEY (`DEPART_ID`)) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COMMENT='組織機構表';-- ------------------------------ Records of `SYS_DEPARTMENT`-- ----------------------------BEGIN;INSERT INTO `SYS_DEPARTMENT` VALUES ('1', '中國電子', '0', null, null), ('2', '子公司1', '1', null, null), ('3', '子公司2', '1', null, null), ('4', '子部門1', '2', null, null), ('5', '子部門2', '2', null, null), ('6', '子部門3', '2', null, null), ('7', '子部門4', '2', null, null), ('8', '科室1', '4', null, null), ('9', '科室2', '4', null, null);COMMIT;SET FOREIGN_KEY_CHECKS = 1;