基于SSM框架的企业人事信息管理系统 - 源码深度解析
在企业信息化管理领域,人事管理始终是核心环节。传统的人工记录或电子表格管理方式存在效率低下、数据分散、易出错及查询不便等痛点。针对这些问题,我们设计并实现了基于SSM框架的企业级人力资源智能管理平台,通过集中化、标准化的数据管理,显著提升了人事部门的工作效率与数据准确性。
系统架构与技术栈
该平台采用经典的三层架构设计,技术选型充分考虑企业级应用的稳定性和扩展性需求:
- Spring框架:作为核心容器,负责管理业务对象生命周期及事务控制,其依赖注入特性有效降低了模块间的耦合度
- Spring MVC:承担Web层的请求分发与视图解析,通过配置化的HandlerMapping和ViewResolver简化了前后端交互流程
- MyBatis:持久层选用MyBatis,通过XML映射文件将Java对象与SQL语句灵活绑定,支持动态SQL编写,便于对复杂人事数据进行操作
前端技术栈采用JSP模板引擎结合jQuery库,确保用户操作的流畅性和界面的友好性。项目构建工具使用Maven,数据库选用MySQL 5.7,通过合理的索引设计与实体关系映射,保障了基础数据查询的性能。
数据库设计亮点分析
用户表设计优化
CREATE TABLE `sys_user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`account` varchar(255) DEFAULT NULL COMMENT '账户',
`password` varchar(255) DEFAULT NULL COMMENT '密码',
`REAL_NAME` varchar(255) DEFAULT NULL COMMENT '真实名称',
`ID_CARD` varchar(255) DEFAULT NULL COMMENT '身份证',
`sex` int(11) DEFAULT NULL COMMENT '性别',
`age` int(11) DEFAULT NULL COMMENT '年龄',
`is_use` int(11) DEFAULT NULL COMMENT '是否启用',
`birthday` date DEFAULT NULL COMMENT '生日',
`join_time` date DEFAULT NULL COMMENT '入职时间',
`left_time` date DEFAULT NULL COMMENT '离职时间',
`job_lvl` int(11) DEFAULT NULL COMMENT '职级',
`mobile` varchar(255) DEFAULT NULL COMMENT '联系方式',
`addr` varchar(255) DEFAULT NULL COMMENT '地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='用户表'
用户表设计体现了高度的人性化考量:
- 字段类型选择:关键标识字段使用INT类型自增主键,确保唯一性和查询效率;个人基本信息字段采用VARCHAR(255)长度,既满足存储需求又避免空间浪费
- 时间处理:时间字段统一使用DATE类型,便于进行日期相关的统计查询
- 索引优化:主键ID自带聚簇索引,同时建议对account、ID_CARD等高频查询字段建立唯一索引,对join_time、dept_id等关联查询字段建立普通索引
- 状态标识:is_use字段使用tinyint类型,采用0/1标识状态,便于进行员工状态筛选
权限体系关系设计
权限表采用树形结构设计,支持无限级权限划分:
CREATE TABLE `sys_permission` (
`id` int(50) NOT NULL AUTO_INCREMENT COMMENT '权限ID',
`permission_code` varchar(255) DEFAULT NULL COMMENT '权限编码',
`permission_desc` varchar(255) DEFAULT NULL COMMENT '权限描述',
`path` varchar(250) DEFAULT NULL COMMENT '路径',
`pid` varchar(255) DEFAULT NULL COMMENT '父权限ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='权限表'
权限设计特点:
- 层级关系:通过pid字段实现权限层级关系,permission_code采用统一的编码规范
- 编码规范:如"user:add"、"dept:query"等,便于权限验证
- 路径映射:path字段与前端路由或后端接口路径对应,实现精确的访问控制
关联表设计采用标准的中间表模式:
CREATE TABLE `sys_user_role` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`user_id` int(10) DEFAULT NULL COMMENT '用户ID',
`role_id` int(10) DEFAULT NULL COMMENT '角色ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='用户角色关联表'
这种设计支持用户多角色、角色多权限的灵活配置,为系统提供了强大的权限管理能力。
核心功能实现详解
验证码生成与安全控制
系统登录模块采用严格的验证码机制,防止恶意登录尝试。验证码控制器实现如下:
package com.kzfire.portal.action.common;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.kzfire.portal.service.CheckCodeService;
@Controller
@RequestMapping("/code")
public class CheckCodeController {
@Autowired
private CheckCodeService checkCodeService;
@RequestMapping("/getImage")
public void getImage(HttpServletRequest request,
HttpServletResponse response) throws IOException {
// 禁止缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "No-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg");
String code = checkCodeService.generateRandomMixedCode();
HttpSession session = request.getSession(true);
session.setAttribute("checkCode", code);
ImageIO.write(checkCodeService.getImage(code), "JPEG",
response.getOutputStream());
}
}
安全控制实现要点:
- 缓存控制:通过设置HTTP头禁止缓存,确保每次请求都是新的验证码
- 混合码生成:验证码服务类生成包含数字和字母的混合码,增强安全性
- 会话管理:生成的验证码图片直接写入响应流,同时将验证码文本存入Session供后续验证使用

员工信息管理模块
员工管理界面提供完整的CRUD操作,支持批量导入导出:
// 员工信息查询服务实现
@Service
public class EmployeeServiceImpl implements EmployeeService {
@Autowired
private EmployeeMapper employeeMapper;
@Override
public PageInfo<EmployeeVO> getEmployeeList(EmployeeQuery query) {
PageHelper.startPage(query.getPageNum(), query.getPageSize());
List<EmployeeVO> list = employeeMapper.selectByCondition(query);
return new PageInfo<>(list);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void addEmployee(Employee employee) {
// 验证身份证号唯一性
if (employeeMapper.checkIdCardExists(employee.getIdCard()) > 0) {
throw new BusinessException("身份证号已存在");
}
employeeMapper.insert(employee);
// 同步更新用户部门关联表
UserDept userDept = new UserDept();
userDept.setUserId(employee.getId())
员工管理模块技术亮点:
- 分页查询:使用PageHelper实现物理分页,提升大数据量查询性能
- 事务管理:通过@Transactional注解确保数据操作的原子性
- 数据验证:在添加员工时验证身份证号唯一性,保证数据完整性
- 关联同步:自动同步更新用户部门关联信息,确保数据一致性