vhr部門管理數據庫設計與編程

vhr部門管理模塊更新啦!爲了讓小夥伴們快速理解部門管理模塊實現思路,我想經過3篇短文來給你們介紹下大體的實現思路和核心代碼。本文是[SpringBoot+Vue先後端分離,使用SpringSecurity完美處理權限問題]系列的延續,建議小夥伴們先閱讀前面的文章,會有助於你理解本文。 前端

1.SpringBoot+Vue先後端分離,使用SpringSecurity完美處理權限問題(一)
2.SpringBoot+Vue先後端分離,使用SpringSecurity完美處理權限問題(二)
3.SpringSecurity中密碼加鹽與SpringBoot中異常統一處理
4.axios請求封裝和異常統一處理
5.權限管理模塊中動態加載Vue組件
6.SpringBoot+Vue先後端分離,使用SpringSecurity完美處理權限問題(六)ios

項目地址:https://github.com/lenve/vhr

好了,那咱們本文主要來看看數據庫的設計與存儲過程的編寫。 git

部門數據庫總體來講仍是比較簡單,以下: github

圖片描述

都是常規字段,腳本能夠在項目中下載。depPath是爲了查詢方便,isParent表示該條是不是父部門。爲了簡化程序中的邏輯,depPath的設置和isParent的設置我都在存儲過程當中完成。sql

添加部門存儲過程

添加部門存儲過程以下:數據庫

DELIMITER $$

USE `vhr`$$

DROP PROCEDURE IF EXISTS `addDep`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `addDep`(in depName varchar(32),in parentId int,in enabled boolean,out result int,out result2 int)
begin
  declare did int;
  declare pDepPath varchar(64);
  insert into department set name=depName,parentId=parentId,enabled=enabled;
  select row_count() into result;
  select last_insert_id() into did;
  set result2=did;
  select depPath into pDepPath from department where id=parentId;
  update department set depPath=concat(pDepPath,'.',did) where id=did;
  update department set isParent=true where id=parentId;
end$$

DELIMITER ;

關於這個存儲過程,我說以下幾點: axios

1.該存儲過程接收五個參數,三個輸入參數分別是部門名稱、父部門Id,該部門是否啓用,兩個輸出參數分別表示受影響的行數和插入成功後id的值。 後端

2.存儲過程首先執行插入操做,插入完成後,將受影響行數賦值給result。 前後端分離

3.而後經過last_insert_id()獲取剛剛插入的id,賦給result2。 spa

4.接下來查詢父部門的depPath,而且和剛剛生成的id組合後做爲剛剛插入部門的depPath。

5.將父部門的isParent字段更新爲true。

將這些邏輯寫在存儲過程當中,能夠簡化咱們代碼中的邏輯。

刪除部門存儲過程

刪除部門也被我寫成了存儲過程,主要是由於刪除過程也要作好幾件事,核心代碼以下:

DELIMITER $$

USE `vhr`$$

DROP PROCEDURE IF EXISTS `deleteDep`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `deleteDep`(in did int,out result int)
begin
  declare ecount int;
  declare pid int;
  declare pcount int;
  select count(*) into ecount from employee where departmentId=did;
  if ecount>0 then set result=-1;
  else 
  select parentId into pid from department where id=did;
  delete from department where id=did and isParent=false;
  select row_count() into result;
  select count(*) into pcount from department where parentId=pid;
  if pcount=0 then update department set isParent=false where id=pid;
  end if;
  end if;
end$$

DELIMITER ;

關於這個存儲過程,我說以下幾點:

1.一個輸入參數表示要刪除數據的id,一個輸出參數表示刪除結果。

2.若是該部門下有員工,則該部門不能被刪除。

3.刪除該部門時注意加上條件isParent=false,即父部門不能被刪除,這一點我在前端已經作了判斷,正常狀況下父部門的刪除請求不會被髮送,可是考慮到前端的數據不能被信任,因此後臺咱們也要限制。

4.刪除成功以後,查詢刪除部門的父部門是否還有其餘子部門,若是沒有,則將父部門的isParent修改成false。

其餘一些瑣碎的技術就不值得介紹了,你們在源碼中自行研究,有問題歡迎留言討論。

關注公衆號,能夠及時接收到最新文章:

圖片描述

相關文章
相關標籤/搜索