SSM整合项目人事管理系统改(2)——需求分析和数据库表结构设计

参考《Spring+MyBatis企业应用实战》(以后称原书)可以知道人事管理系统分为6个模块以及各种实现的功能为:

1.用户管理:CRUD用户;

2.部门管理:CRUD部门;

3.员工管理:CRUD员工;

4.公告管理:CRUD公告;

5.职位管理:CRUD职位;

6.下载中心:上传下载,预览删除,模糊查询文件。

 

这6个模块就对应6个实体,其关系为:

    一个部门下可以有多个员工(1..N),同一个职位下的员工可以有多个(1..N),一个用户可以发多个公告(1..N),一个用户可以上传多个文档(1..N)。

模式图如下:

在MySQL DB创建以上模式的Sql语句为(参考原书):

#创建数据库hrm_db
CREATE DATABASE IF NOT EXISTS hrm_db  DEFAULT CHARACTER SET utf8;

#使用数据库hrm_db
USE hrm_db;

#部门表dept_inf
CREATE TABLE dept_inf (
  ID INT(11) NOT NULL AUTO_INCREMENT,
  NAME VARCHAR(50) NOT NULL,
  REMARK VARCHAR(300) DEFAULT NULL,
  PRIMARY KEY (ID)
) ENGINE=INNODB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
INSERT  INTO dept_inf(ID,NAME,REMARK) VALUES 
(1,'技术部','技术部'),
(2,'运营部','运营部'),(3,'财务部','财务部'),
(5,'总公办','总公办'),(6,'市场部','市场部'),
(7,'教学部','教学部');

#职位表job_inf
CREATE TABLE job_inf (
  ID INT(11) NOT NULL AUTO_INCREMENT,
  NAME VARCHAR(50) NOT NULL,
  REMARK VARCHAR(300) DEFAULT NULL,
  PRIMARY KEY (ID)
) ENGINE=INNODB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
INSERT  INTO job_inf(ID,NAME,REMARK) VALUES 
(1,'职员','职员'),
(2,'Java开发工程师','Java开发工程师'),
(3,'Java中级开发工程师','Java中级开发工程师'),
(4,'Java高级开发工程师','Java高级开发工程师'),
(5,'系统管理员','系统管理员'),
(6,'架构师','架构师'),
(7,'主管','主管'),
(8,'经理','经理'),
(9,'总经理','总经理');

#管理员表user_inf
CREATE TABLE user_inf (
  ID INT(11) NOT NULL AUTO_INCREMENT,
  loginname VARCHAR(20) NOT NULL,
  PASSWORD VARCHAR(16) NOT NULL,
  STATUS INT(11) NOT NULL DEFAULT '1',
  createdate TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  username VARCHAR(20) DEFAULT NULL,
  PRIMARY KEY (ID)
) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
INSERT  INTO user_inf(ID,loginname,PASSWORD,STATUS,createdate,username) VALUES 
(1,'admin','123456',2,'2019-03-12 09:34:28','超级管理员');

#职员表employee_inf
CREATE TABLE employee_inf (
  ID INT(11) NOT NULL AUTO_INCREMENT,
  DEPT_ID INT(11) NOT NULL,
  JOB_ID INT(11) NOT NULL,
  NAME VARCHAR(20) NOT NULL,
  CARD_ID VARCHAR(18) NOT NULL,
  ADDRESS VARCHAR(50) NOT NULL,
  POST_CODE VARCHAR(50) DEFAULT NULL,
  TEL VARCHAR(16) DEFAULT NULL,
  PHONE VARCHAR(11) NOT NULL,
  QQ_NUM VARCHAR(10) DEFAULT NULL,
  EMAIL VARCHAR(50) NOT NULL,
  SEX INT(11) NOT NULL DEFAULT '1',
  PARTY VARCHAR(10) DEFAULT NULL,
  BIRTHDAY DATETIME DEFAULT NULL,
  RACE VARCHAR(100) DEFAULT NULL,
  EDUCATION VARCHAR(10) DEFAULT NULL,
  SPECIALITY VARCHAR(20) DEFAULT NULL,
  HOBBY VARCHAR(100) DEFAULT NULL,
  REMARK VARCHAR(500) DEFAULT NULL,
  CREATE_DATE TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (ID),
  KEY FK_EMP_DEPT (DEPT_ID),
  KEY FK_EMP_JOB (JOB_ID),
  CONSTRAINT FK_EMP_DEPT FOREIGN KEY (DEPT_ID) REFERENCES dept_inf (ID),
  CONSTRAINT FK_EMP_JOB FOREIGN KEY (JOB_ID) REFERENCES job_inf (ID)
) ENGINE=INNODB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;
INSERT  INTO employee_inf(ID,DEPT_ID,JOB_ID,NAME,CARD_ID,ADDRESS,POST_CODE,TEL,PHONE,QQ_NUM,EMAIL,SEX,PARTY,BIRTHDAY,RACE,EDUCATION,SPECIALITY,HOBBY,REMARK,CREATE_DATE) 
VALUES (1,1,8,'爱丽丝','4328011988','广州天河','510000','020-77777777','13902001111','36750066','251425887@qq.com',0,'党员','1980-01-01 00:00:00','满','本科','美声','唱歌','四大天王','2019-03-14 11:35:18'),
(2,2,1,'杰克','22623','43234','42427424','42242','4247242','42424','251425887@qq.com',2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'2019-03-14 11:35:18'),
(3,1,2,'bb','432801197711251038','广州','510000','020-99999999','13907351532','36750064','36750064@qq.com',1,'党员','1977-11-25 00:00:00','汉','本科','计算机','爬山','无','2019-07-14 09:54:52');

#公告表notice_inf
CREATE TABLE notice_inf (
  ID INT(11) NOT NULL AUTO_INCREMENT,
  TITLE VARCHAR(50) NOT NULL,
  CONTENT TEXT NOT NULL,
  CREATE_DATE TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  USER_ID INT(11) DEFAULT NULL,
  PRIMARY KEY (ID),
  KEY FK_NOTICE_USER (USER_ID),
  CONSTRAINT FK_NOTICE_USER FOREIGN KEY (USER_ID) REFERENCES user_inf (ID)
) ENGINE=INNODB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8;

#文档表document_inf
CREATE TABLE document_inf (
  ID INT(11) NOT NULL AUTO_INCREMENT,
  TITLE VARCHAR(50) NOT NULL,
  filename VARCHAR(300) NOT NULL,
  REMARK VARCHAR(300) DEFAULT NULL,
  CREATE_DATE TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  USER_ID INT(11) DEFAULT NULL,
  PRIMARY KEY (ID),
  KEY FK_DOCUMENT_USER (USER_ID),
  CONSTRAINT FK_DOCUMENT_USER FOREIGN KEY (USER_ID) REFERENCES user_inf (ID)
) ENGINE=INNODB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

 

   数据库层弄好了之后,就开始项目的分层构建。

   首先是实体类层(原书叫领域对象层,也有叫pojo层...)。在hrm项目的src/main/java下建立一个domain包,并创建六个实体类,了。完成之后类似下图:

Dept.java:

package com.rr.hrm.domain;

import java.io.Serializable;

public class Dept implements Serializable{
	private Integer id;
	private String name;
	private String remark;  // 详细描述

    // ... Getter and Setter 
}

Document.java:

package com.rr.hrm.domain;

import java.io.Serializable;
import java.util.Date;

public class Document implements Serializable {
	private Integer id;
	private String title; // 标题
	private String fileName; // 文件名
	// 文件,缺Spring依赖,先注释掉
	//private MultipartFile file;
	private String remark; // 描述
	private Date createDate; // 上传时间
	private User user;  // 上传人

    // ...Getter and Setter
}

Employee.java:

package com.rr.hrm.domain;

import java.io.Serializable;
import java.util.Date;

public class Document implements Serializable {
	private Integer id;
	private String title; // 标题
	private String fileName; // 文件名
	// 文件,缺Spring依赖,先注释掉
	//private MultipartFile file;
	private String remark; // 描述
	private Date createDate; // 上传时间
	private User user;  // 上传人

    // ...Getter and Setter
}

Job.java:

package com.rr.hrm.domain;

import java.io.Serializable;

public class Job implements Serializable{
	private Integer id;
	private String name;
	private String remark;  // 详细描述

    // ...Getter and Setter
}

Notice.java:

import java.io.Serializable;
import java.util.Date;

public class Notice implements Serializable{
	private Integer id;
	private String title; // 标题
	private String content; // 内容
	private Date createDate; // 发布日期
	private User user; // 发布人

    // ...Getter and Setter
}

User.java:

package com.rr.hrm.domain;

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable{
	private Integer id;
	private String username;
	private String loginname;
	private String password;
	private Integer status;
	private Date createDate;

    // ...Getter and Setter
}

 

  这样基本的模型就搭建起来了,由于Spring依赖没导入进来,所以实体类中有一些属性被我暂时注释掉了,下一篇中就来完成pom依赖的导入吧!

 源码参考

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值