基于SSM框架的医院电子病历管理系统 - 源码深度解析
在医疗信息化快速发展的今天,传统纸质病历管理模式已无法满足现代医疗机构对效率、安全和数据价值挖掘的需求。纸质病历存在易损毁、难检索、信息孤岛等问题,严重制约了医疗服务质量提升。针对这一痛点,我们设计并实现了一套基于SSM框架的医院电子病历管理平台,该平台采用成熟的Java技术栈,为医疗机构提供完整的数字化病历解决方案。
系统架构与技术栈设计
该平台采用经典的三层架构模式,确保系统的高内聚、低耦合特性:
- 表现层:使用JSP技术结合jQuery库实现动态页面交互
- 控制层:基于Spring MVC框架处理业务请求和路由分发
- 业务逻辑层:由Spring框架统一管理服务组件和事务控制
- 数据持久层:通过MyBatis实现对象关系映射和数据访问
核心技术栈配置
<!-- Spring核心依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.8</version>
</dependency>
<!-- MyBatis集成 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<!-- 数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.6</version>
</dependency>
架构优势分析:
- Spring框架的IoC容器负责管理所有Bean的生命周期,通过依赖注入实现各层之间的松耦合
- AOP面向切面编程用于统一处理事务管理、日志记录、性能监控等横切关注点
- MyBatis的动态SQL能力极大简化了复杂病历查询条件的拼接操作,提升开发效率
- Druid连接池提供强大的数据库连接管理和监控功能
数据库设计亮点分析
用户权限管理体系
用户表t_yonghu的设计体现了精细化的权限控制思路:
CREATE TABLE `t_yonghu` (
`yonghuId` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`yonghuName` varchar(255) DEFAULT NULL COMMENT '用户名',
`yonghuPassword` varchar(255) DEFAULT NULL COMMENT '密码',
`yonghuXingming` varchar(255) DEFAULT NULL COMMENT '用户姓名',
`yonghuSex` int(11) DEFAULT NULL COMMENT '用户性别',
`yonghuAge` int(11) DEFAULT NULL COMMENT '用户年龄',
`yonghuPhone` varchar(255) DEFAULT NULL COMMENT '用户电话',
`yonghuImg` varchar(255) DEFAULT NULL COMMENT '用户图片',
`yhroleId` int(11) DEFAULT NULL COMMENT '角色ID',
`yhroleName` varchar(255) DEFAULT NULL COMMENT '角色名称',
`yhbumenId` int(11) DEFAULT NULL COMMENT '部门ID',
`yhbumenName` varchar(255) DEFAULT NULL COMMENT '部门名称',
PRIMARY KEY (`yonghuId`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='用户表'
权限设计特色:
- 通过
yhroleId和yhbumenId分别关联角色表和部门表,实现基于RBAC(基于角色的访问控制)的权限管理 - 采用冗余字段设计策略,在查询性能与数据一致性之间取得平衡
- 支持多级部门管理和角色权限继承机制
扩展性良好的类型系统
类型表t_yxtype采用通用设计模式,支持系统未来的功能扩展:
CREATE TABLE `t_yxtype` (
`yxtypeId` int(11) NOT NULL AUTO_INCREMENT COMMENT '类型ID',
`yxtypeName` varchar(255) DEFAULT NULL COMMENT '类型名称',
`yxtypeMark` varchar(255) DEFAULT NULL COMMENT '类型备注',
PRIMARY KEY (`yxtypeId`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='类型表'
扩展性设计优势:
- 支持动态添加新的病历类型、诊断类型、药品分类等,无需修改数据库结构
- 通过
yxtypeMark字段提供额外的描述信息,增强了系统的可配置性 - 采用元数据驱动设计,降低系统维护成本

核心功能实现解析
多角色登录与权限控制
系统支持管理员、医生、护士等不同角色的登录验证,通过Spring拦截器实现统一的权限校验:
@Component
public class AuthInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
HttpSession session = request.getSession();
Integer roleId = (Integer) session.getAttribute("yhroleId");
String requestURI = request.getRequestURI();
// 权限验证逻辑
if (roleId == null) {
response.sendRedirect("/login");
return false;
}
// 医生角色只能访问特定功能
if (roleId == 2 && requestURI.contains("/admin/")) {
response.sendRedirect("/accessDenied");
return false;
}
return true;
}
}
安全机制特点:
- 基于会话的权限验证,确保用户身份真实性
- 细粒度的URL级别权限控制
- 支持动态权限配置和实时生效
病历信息管理功能
病历管理模块采用面向对象的设计思想,实体类与数据库表严格映射:
@Entity
@Table(name = "t_bingli")
public class MedicalRecord {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer recordId;
private String patientName;
private String diagnosis;
private String treatment;
private Date createTime;
private Integer doctorId;
// 关联患者信息
@ManyToOne
@JoinColumn(name = "patientId")
private Patient patient;
// Getter和Setter方法
public Integer getRecordId() { return recordId; }
public void setRecordId(Integer recordId) { this.recordId = recordId; }
// 其他getter/setter方法...
}
对应的MyBatis映射文件实现了复杂的查询逻辑:
<mapper namespace="com.hospital.mapper.MedicalRecordMapper">
<select id="selectByConditions" parameterType="map"
resultType="MedicalRecord">
SELECT r.*, p.patientName, d.doctorName
FROM t_bingli r
LEFT JOIN t_huanzhe p ON r.patientId = p.patientId
LEFT JOIN t_doctor d ON r.doctorId = d.doctorId
<where>
<if test="patientName != null and patientName != ''">
AND p.patientName LIKE CONCAT('%', #{patientName}, '%')
</if>
<if test="startDate != null">
AND r.createTime >= #{startDate}
</if>
<if test="endDate != null">
AND r.createTime <= #{endDate}
</if>
</where>
ORDER BY r.createTime DESC
</select>
</mapper>
病历管理特色功能:
- 支持多条件组合查询,满足复杂检索需求
- 实现病历数据的完整生命周期管理
- 提供病历模板管理和快速录入功能

统计分析与报表生成
系统提供强大的数据统计功能,基于Spring框架的定时任务和报表引擎实现:
@Service
public class StatisticsService {
@Autowired
private MedicalRecordMapper recordMapper;
/**
* 生成科室病历统计报表
*/
public DepartmentStats generateDepartmentStats(Date startDate, Date endDate) {
// 实现统计逻辑
return departmentStats;
}
/**
* 疾病类型分布分析
*/
public DiseaseDistribution analyzeDiseaseDistribution(String period) {
// 实现疾病分布分析
return distribution;
}
}
统计分析能力:
- 实时数据监控和趋势分析
- 多维度统计报表生成
- 数据可视化展示
- 支持报表导出和打印功能
该系统通过SSM框架的有机结合,为医院提供了稳定、高效、安全的电子病历管理解决方案,显著提升了医疗信息化水平和工作效率。