基于SSM框架的班级同学录管理系统 - 源码深度解析
在数字化校园建设不断深入的今天,传统纸质同学录面临着信息易丢失、更新困难、查询不便等痛点。基于此,班级校友关系管理平台应运而生。该系统采用成熟的SSM(Spring+SpringMVC+MyBatis)技术栈构建,为班级成员提供了一个集信息管理、情感联络、公告发布于一体的数字化解决方案。
系统架构与技术栈
三层架构设计
该平台采用经典的三层架构设计,确保系统的高内聚低耦合特性:
- 表现层:基于SpringMVC框架,清晰划分控制器、处理器映射和视图解析的职责
- 业务逻辑层:Spring框架作为核心容器,通过依赖注入(DI)和控制反转(IoC)机制管理业务对象
- 数据访问层:MyBatis作为持久层框架,通过灵活的XML配置和注解方式管理SQL映射
技术选型优势
- Spring框架:通过Bean工厂管理对象生命周期,减少模块间的直接依赖
- SpringMVC:基于DispatcherServlet的请求分发机制,规范HTTP请求处理流程
- MyBatis:提供动态SQL支持,避免JDBC繁琐的编码工作
- 前端技术:JSP结合JSTL标签库进行页面渲染,配合HTML5、CSS3和JavaScript构建响应式界面
数据库设计亮点
用户权限管理设计
t_admin表采用最小权限原则设计,通过type字段实现角色分级管理:
CREATE TABLE `t_admin` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(30) NOT NULL COMMENT '用户名',
`userpwd` varchar(100) NOT NULL COMMENT '用户密码',
`type` int(11) NOT NULL DEFAULT 0 COMMENT '管理员类型',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT
设计特点:
- 密码字段预留100字符长度,支持BCrypt等加密算法
type字段默认值设为0,符合"默认拒绝"的安全原则- 采用BTREE索引优化查询性能
房屋信息管理优化
t_house表的设计体现了业务完整性约束:
CREATE TABLE `t_house` (
`h_id` int(11) NOT NULL AUTO_INCREMENT,
`house_desc` varchar(255) NOT NULL COMMENT '租房描述',
`house_model` varchar(20) NOT NULL COMMENT '房屋类型',
`house_area` varchar(20) NOT NULL COMMENT '房屋面积',
`house_status` varchar(2) DEFAULT NULL COMMENT '审核状态',
`publisherid` int(10) NOT NULL COMMENT '发布人ID',
`publish_time` datetime DEFAULT NULL COMMENT '发布时间',
PRIMARY KEY (`h_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
业务逻辑实现:
house_status字段支持三态审核:'Y'(通过)、'N'(拒绝)、NULL(待审核)- 通过外键约束确保
publisherid与用户表的关联一致性 - 图片字段采用varchar(1000)类型,支持JSON格式存储多图URL
数据关联设计
订单与留言表通过外键关联确保数据完整性:
CREATE TABLE `t_order` (
`o_id` int(11) NOT NULL AUTO_INCREMENT,
`h_id` int(11) NOT NULL COMMENT '房屋租赁id',
`u_id` int(11) NOT NULL COMMENT '用户id',
`order_time` datetime DEFAULT NULL COMMENT '下单时间',
PRIMARY KEY (`o_id`) USING BTREE,
KEY `fk1` (`h_id`) USING BTREE,
KEY `fk2` (`u_id`) USING BTREE,
CONSTRAINT `fk1` FOREIGN KEY (`h_id`) REFERENCES `t_house` (`h_id`),
CONSTRAINT `fk2` FOREIGN KEY (`u_id`) REFERENCES `t_users` (`u_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
核心功能实现
公告管理模块
采用标准的CRUD操作模式,基于注解的控制器设计:
@Controller
@RequestMapping(value = "Gonggao")
public class GonggaoController {
@Autowired
private GonggaoService gonggaoService;
/**
* 初始化页面请求处理
*/
@RequestMapping(value = "/initPage.do")
public String initPage(HttpServletRequest request, Model model) {
return "Gonggao/saveOrUpdate";
}
/**
* 数据列表查询
*/
@RequestMapping(value = "/selectList.do")
public String selectList(HttpServletRequest request, Gonggao gonggao, Model model) {
gonggao = gonggaoService.getById(gonggao.getId());
model.addAttribute("util", gonggao);
return "Gonggao/saveOrUpdate";
}
}

分页查询实现:
@SuppressWarnings({ "rawtypes", "unchecked" })
@RequestMapping(value = "/getAllDataInPage.do")
public String getAllDataInPage(HttpServletRequest request, Model model) {
String field = request.getParameter("field");
String fieldValue = request.getParameter("fieldValue");
String pageNo = request.getParameter("pageModel.currentPageNo");
int currentPageNo = 1;
try{
currentPageNo = Integer.parseInt(pageNo);
fieldValue = new String(fieldValue.getBytes("UTF-8"), "UTF-8");
}catch(Exception e){}
List<Gonggao> list = gonggaoService.getListByPage(field, fieldValue, currentPageNo);
model.addAttribute("list", list);
return "Gonggao/gonggaoList";
}
学生信息管理
支持完整的CRUD操作,包含事务管理:
@RequestMapping(value = "/saveOrUpdate.do")
public String saveOrUpdate(HttpServletRequest request, Gonggao gonggao, Model model) {
try {
if(gonggao.getId() == null) {
gonggaoService.save(gonggao);
} else {
gonggaoService.update(gonggao);
}
model.addAttribute("message", "操作成功");
} catch (Exception e) {
model.addAttribute("message", "操作失败");
}
return "redirect:/Gonggao/getAllDataInPage.do";
}

删除操作实现:
@RequestMapping(value = "/delete.do")
public String delete(HttpServletRequest request, Gonggao gonggao, Model model) {
try {
gonggaoService.delete(gonggao.getId());
model.addAttribute("message", "删除成功");
} catch (Exception e) {
model.addAttribute("message", "删除失败");
}
return "redirect:/Gonggao/getAllDataInPage.do";
}
用户权限控制
基于Session的认证机制实现安全的登录管理:
@RequestMapping(value = "/login.do")
public String login(HttpServletRequest request, Admin admin, Model model) {
Admin loginAdmin = adminService.validateLogin(admin);
if(loginAdmin != null) {
request.getSession().setAttribute("currentUser", loginAdmin);
return "redirect:/main/index.do";
} else {
model.addAttribute("error", "用户名或密码错误");
return "login";
}
}
技术特色与创新点
- 安全性设计:采用基于角色的访问控制(RBAC)模型
- 性能优化:数据库连接池配置、SQL语句优化
- 可扩展性:模块化设计支持功能快速扩展
- 用户体验:响应式界面设计,支持多终端访问
该系统不仅解决了传统同学录的痛点,更为数字化校园建设提供了可复用的技术方案,具有良好的实用价值和推广前景。