
1. 项目概述这个基于JavaMyBatisMySQL的Web时间日程管理系统是我在2017年12月开始的毕业设计项目。作为一个完整的Web应用它实现了个人和团队的时间管理功能包括计划安排、便签记录、提醒设置等核心功能。系统采用B/S架构前端使用Bootstrap框架和FullCalendar插件后端基于Guns快速开发框架构建。提示Guns框架整合了SpringBoot、Shiro、MyBatis-Plus等主流技术栈可以快速构建企业级应用。我在选择这个框架时主要考虑了开发效率和功能完整性。2. 技术选型与架构设计2.1 技术栈组成2.1.1 前端技术Bootstrap 3.3.7响应式布局框架jQuery 2.1.4DOM操作和AJAX请求FullCalendar 3.9.0日程展示插件Layer 3.0.3弹层组件2.1.2 后端技术Spring Boot 1.5.6基础框架MyBatis-Plus 2.1.9ORM框架Shiro 1.4.0权限控制Beetl 2.8.1模板引擎2.1.3 数据库MySQL 5.7关系型数据库Druid 1.1.5数据库连接池2.2 系统架构设计系统采用经典的三层架构表示层Web → 业务逻辑层Service → 数据访问层DAO我特别设计了前后端分离的交互方式前端通过AJAX请求RESTful API后端返回JSON格式数据前端使用JavaScript渲染页面注意虽然采用了Beetl模板引擎但主要业务逻辑都通过API接口实现保持了前后端的松耦合。3. 核心功能实现3.1 日程管理模块3.1.1 计划管理// PlanController.java PostMapping(/add) ResponseBody public Object add(Plan plan) { // 自动填充创建时间和用户ID plan.setCreatetime(new Date()); plan.setUserid(ShiroKit.getUser().getId()); // 计算时间长度分钟 long diff plan.getEndtime().getTime() - plan.getStarttime().getTime(); plan.setTimelength((int) (diff / (1000 * 60))); return planService.insert(plan) ? SUCCESS_TIP : ERROR_TIP; }3.1.2 提醒功能实现// plan.js function setReminder(plan) { let now new Date(); let remindTime new Date(plan.remindtime); if(remindTime now) { let delay remindTime - now; setTimeout(() { layer.msg(提醒 plan.title, { icon: 1, time: 5000 }); // 播放提醒音效 document.getElementById(remindAudio).play(); }, delay); } }3.2 用户权限设计3.2.1 角色划分普通用户管理个人日程管理员管理系统所有用户和日程3.2.2 Shiro配置// ShiroConfig.java Bean public ShiroFilterFactoryBean shiroFilterFactoryBean() { ShiroFilterFactoryBean shiroFilter new ShiroFilterFactoryBean(); // 设置过滤规则 MapString, String filterMap new LinkedHashMap(); filterMap.put(/user/**, roles[admin]); filterMap.put(/admin/**, roles[admin]); shiroFilter.setFilterChainDefinitionMap(filterMap); return shiroFilter; }4. 数据库设计4.1 核心表结构4.1.1 计划表plan字段类型说明idint主键titlevarchar(255)计划标题starttimedatetime开始时间endtimedatetime结束时间remindtimedatetime提醒时间repeatint重复次数levelint重要程度(1-5)useridint用户ID4.1.2 便签表note字段类型说明idint主键titlevarchar(255)标题contenttext内容is_showtinyint是否展示is_toptinyint是否置顶useridint用户ID5. 开发经验与优化建议5.1 踩坑记录FullCalendar时区问题现象前端显示时间比实际存储时间少8小时解决配置timezone: local并统一使用UTC时间存储MyBatis-Plus逻辑删除冲突现象自动填充字段与逻辑删除字段冲突解决自定义MetaObjectHandler处理填充逻辑5.2 性能优化日程查询优化-- 添加复合索引 ALTER TABLE plan ADD INDEX idx_user_time (userid, starttime, endtime);缓存策略// 使用Spring Cache缓存用户数据 Cacheable(value user, key #id) public User getUserById(Integer id) { return userMapper.selectById(id); }6. 部署方案6.1 环境要求JDK 1.8MySQL 5.7Tomcat 8.56.2 部署步骤导入SQL脚本到MySQL修改application.yml中的数据库配置打包项目mvn clean package部署war包到Tomcat提示生产环境建议使用Nginx做反向代理和静态资源缓存。7. 项目扩展方向移动端适配开发响应式布局或独立APP团队协作增加日程共享和任务分配功能数据统计添加时间管理分析报表第三方登录集成微信、QQ等社交账号登录这个项目从技术选型到功能实现都经过仔细考量虽然作为毕业设计完成但具备了实际应用的基础框架。在开发过程中我特别注重代码的可维护性和扩展性为后续功能迭代预留了接口。