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
好了,那咱们本文主要来看看数据库的设计与存储过程的编写。 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。
其余一些琐碎的技术就不值得介绍了,你们在源码中自行研究,有问题欢迎留言讨论。
关注公众号,能够及时接收到最新文章: