164
社区成员
发帖
与我相关
我的任务
分享| 项目所属课程 | EE308FZ(软件工程),福州大学梅努斯国际工程学院 |
|---|---|
| 作业要求 | 作业链接 |
| 作业目标 | 通过极限编程完成一个带有收藏、导入导出、多个联系方式的通讯录系统 |
| GitHub链接 | https://github.com/lzc1c/addressbook-project |
| 远程部署 | 未部署(本地运行) |
| 学生ID | 梁哲尘: (MU) 23125098 (FZU) 832302226 |
本项目共提交 11 次 commits,其中:
项目采用 单仓库、前后端一体化结构(Spring Boot + Thymeleaf),所有代码均在 src/main 下管理
![主分支提交记录]

没找到队友独立完成
⚠️ 注:因 Spring Boot 4(Hibernate 6)与 SQLite 兼容性问题复杂,我选择聚焦功能实现,未进行云部署。
实现方式:
Contact 实体中添加 isFavorite: Boolean 字段
}
数据模型设计:
创建 ContactMethod 实体(类型:PHONE/EMAIL/ADDRESS/SOCIAL)
Contact 与 ContactMethod 为一对多关系(@OneToMany)

表单中动态添加/删除联系方式行
每行包含“类型下拉框 + 内容输入框”

3.2.3. 导入和导出(25分)
导出 Excel:
使用 Apache POI 创建 .xlsx 文件
表头:姓名、是否收藏、电话、邮箱、地址、社交账号(多值用换行分隔)
控制器返回 ResponseEntity 触发浏览器下载

用户上传 .xlsx 文件
后端解析每一行,按列提取信息
对多值字段(如电话)按换行符拆分为多个 ContactMethod
批量保存到数据库

4.2. 程序运行截图
4.2.1. 主界面(含收藏星标)

收藏联系人置顶显示
多联系方式以换行形式展示
4.2.2. 新建/编辑联系人

动态增删联系方式
类型可选(电话/邮箱/地址/社交)
4.2.3. 导出 Excel



SQLite + Spring Boot 4 兼容性问题:尝试自定义 SQLiteDialect,但 Hibernate 6 移除了旧 API,调试数小时无果,最终决定放弃部署,专注本地功能。
POI 导入多值字段解析:需处理换行符、空值、非法格式,通过正则和异常捕获增强鲁棒性。
Thymeleaf 动态表单绑定:List 绑定需使用 th:field="*{methods[${index}].value}",初期语法错误导致数据无法回显。
前端样式统一:Thymeleaf 无组件化,重复代码多,通过抽取 fragments 解决。
AJAX 刷新局部区域:原计划整页刷新,后改用 fetch + innerHTML 实现星标实时更新。
文件上传安全校验:限制仅 .xlsx 文件,防止恶意上传。

“能跑”比“完美”更重要。
我曾花大量时间试图解决 SQLite 在 Hibernate 6 中的兼容问题,但最终意识到:课程目标是功能实现与团队协作,而非强行部署。于是果断回归核心需求,确保三大功能完整可用。
通过这次合作,我学会了:
如何在技术困境中及时止损
如何通过清晰的模块划分高效协作
如何用最简方案达成作业要求