vhr部门管理模块更新啦!为了让小伙伴们快速理解部门管理模块实现思路,我想通过3篇短文来给大家介绍下大致的实现思路和核心代码。本文是[SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题]系列的延续,建议小伙伴们先阅读前面的文章,会有助于你理解本文。

1.SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题(一)
2.SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题(二)
3.SpringSecurity中密码加盐与SpringBoot中异常统一处理
4.axios请求封装和异常统一处理
5.权限管理模块中动态加载Vue组件
6.SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题(六)

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

好了,那我们本文主要来看看数据库的设计与存储过程的编写。

部门数据库整体来说还是比较简单,如下:

都是常规字段,脚本可以在项目中下载。depPath是为了查询方便,isParent表示该条是否是父部门。为了简化程序中的逻辑,depPath的设置和isParent的设置我都在存储过程中完成。

添加部门存储过程

添加部门存储过程如下:

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)
begindeclare 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 ;

关于这个存储过程,我说如下几点:

1.该存储过程接收五个参数,三个输入参数分别是部门名称、父部门Id,该部门是否启用,两个输出参数分别表示受影响的行数和插入成功后id的值。

2.存储过程首先执行插入操作,插入完成后,将受影响行数赋值给result。

3.然后通过last_insert_id()获取刚刚插入的id,赋给result2。

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)
begindeclare 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。

其他一些琐碎的技术就不值得介绍了,大家在源码中自行研究,有问题欢迎留言讨论。

关注公众号,可以及时接收到最新文章:

vhr部门管理数据库设计与编程相关推荐

  1. 系统管理模块_部门管理_设计(映射)本模块中的所有实体并总结设计实体的技巧_懒加载异常问题_树状结构...

    系统管理模块_部门管理_设计本模块中的所有实体并总结设计实体的技巧 设计实体流程 1,有几个实体? 一般是一组增删改查对应一个实体. 2,实体之间有什么关系? 一般是页面引用了其他的实体时,就表示与这 ...

  2. SQL——一种简单的基于角色控制的权限管理数据库设计DEMO

    -- ---------------------------- -- Table structure for resource -- ---------------------------- DROP ...

  3. web-ylbtech(合同管理)-数据库设计

    ylbtech-DatabaseDesgin:web-ylbtech(合同管理)-数据库设计 1.A,数据库关系图 1.B,数据库设计脚本 /App_Data/sql-basic.sql View C ...

  4. ylbtech-Bill(发票管理)-数据库设计

    ylbtech-dbs:ylbtech-Bill(发票管理)-数据库设计 -- ============================================= -- DatabaseNam ...

  5. 合同管理数据库设计mysql_工程合同管理信息系统的数据设计理念

    一.工程合同管理流程系统数据库设计 建立数据库是为了更有效地管理数据.获取信息,一般的用户都是通过应用程序使用数据库的,用户的应用程序体现了信息系统的功能.设计数据库和设计建立在数据库之上的应用程序是 ...

  6. 学生宿舍管理数据库设计(下)

    一.系统开发概述 3 1.1 系统开发背景 3 1.2 系统功能需求分析 3 1.3 系统性能需求分析 4 1.4 系统数据流程分析 5 二.数据库概念结构设计 5 2.1 数据库局部E-R图 5 2 ...

  7. 学生宿舍管理数据库设计(上)

    一.系统开发概述 3 1.1 系统开发背景 3 1.2 系统功能需求分析 3 1.3 系统性能需求分析 4 1.4 系统数据流程分析 5 二.数据库概念结构设计 5 2.1 数据库局部E-R图 5 2 ...

  8. 基于角色的权限管理数据库设计(RBAC)

    来源:http://hi.baidu.com/%CD%F5%BF%C6%BE%FC/blog/item/b9bf7f13b0551e1cb8127b6f.html */ use [master] go ...

  9. python管理数据库设计_Pycharm+Django+Python+MySQL开发 后台管理数据库

    Django框架十分简单易用,适合搭建个人博客网站.网上有很多教程,大多是关于命令行操作Django,这里分享一些用最新工具进行Django开发过程,主要是PyCharm太强大,不用有点可惜. 第一次 ...

最新文章

  1. DNS基本原理与配置
  2. 开发日记-20190817 关键词 Hello Unix
  3. html form label标签基础语法结构与使用案例教程(转载)
  4. 面试官问:为什么String的hashCode选择 31 作为乘子?
  5. 【语法解释】init
  6. 综合布线机房服务器维护,信息机房的综合布线系统维护
  7. .NET的一点历史故事:误入歧途,越陷越深
  8. python nodemcu_python开发nodemcu(一)
  9. 记录A component required a bean named ‘studentService‘ that could not be found.
  10. linux tcb,在Linux中从潜藏密码迁移至tcb怎么做?
  11. 新零售讲堂之时代下的传统零售业,何去何从?
  12. 《设计模式沉思录》—第2章2.4节访问权限
  13. Python实现人工神经网络逼近股票价格
  14. 浅谈跨平台框架 Flutter 的优势与结构 1
  15. pythonwin下载中文版_Python官方下载 v3.9.0中文版_Win10镜像官网
  16. haneWin NFS服务器配置
  17. 精灵3P+Pix4D简单航测详细应用教程
  18. 实战 SQL:实现百度、高德等地图中的地铁换乘线路查询
  19. Office2016 打开excel出现丢失appvisvsubsystems32.dll
  20. 数一数你连听都没听过的古典小说有多少?

热门文章

  1. pytorch开发工具
  2. 线程中断:interrupt、interrupted、isInterrupted
  3. Android代码中实现WAP方式联网
  4. Spark抽取MySQL分表优化
  5. sentos7查看网络配置_怎么查看centos7的网络配置
  6. 文件cpy改进,文件加密,对文件两次运算可解密,密码65
  7. oracle窗口设置,ORACLE安装DISPLAY变量设置 go with
  8. java 生成UUID字符串工具类 UUIDUtil
  9. java 排序库_Java数据库排序
  10. 台大郭彦甫_MATLAB视频笔记(六)图形界面_GUI程序设计