1. 项目概述与背景
作为一名长期使用各类任务管理工具的开发者,我深刻理解传统任务管理方式的痛点。纸质便签容易丢失,电子表格难以维护,而市面上大多数任务管理软件要么功能过于复杂,要么无法满足个性化需求。这正是我选择开发这款基于SSM框架的个人任务管理系统的初衷。
这个系统采用Java作为后端开发语言,使用Spring+SpringMVC+MyBatis(SSM)作为基础框架,前端使用原生Android开发,数据库选用MySQL 5.7/8.0。系统主要面向需要高效管理个人任务的用户群体,特别是学生和职场人士,帮助他们实现任务的数字化、系统化管理。
提示:SSM框架是Java Web开发的经典组合,Spring负责业务逻辑和依赖注入,SpringMVC处理Web请求,MyBatis作为ORM框架操作数据库。这种组合既保证了开发效率,又能满足毕业设计对技术深度的要求。
2. 系统架构设计
2.1 技术选型与开发环境
在项目启动阶段,我对比了多种技术方案,最终确定以下技术栈:
-
后端框架:SSM(Spring 5.x + SpringMVC 5.x + MyBatis 3.x)
- Spring:提供IoC容器和AOP支持,简化Bean管理
- SpringMVC:基于MVC模式的Web框架,处理HTTP请求
- MyBatis:轻量级ORM框架,灵活操作数据库
-
数据库:MySQL 5.7/8.0
- 选择理由:开源免费、性能稳定、社区支持完善
- 开发工具:Navicat Premium 15(数据库设计和管理)
-
前端技术:
- Android原生开发(Java)
- XML布局文件
- Retrofit网络请求库
-
开发工具:
- IntelliJ IDEA 2021(后端开发)
- Android Studio 4.2(移动端开发)
- JDK 1.8
- Tomcat 8.5(应用服务器)
- Maven 3.6(依赖管理)
2.2 系统功能模块设计
系统采用前后端分离架构,主要分为以下功能模块:
-
用户管理模块
- 注册/登录/个人信息管理
- 权限控制(管理员/普通用户)
-
任务核心模块
- 今日计划管理
- 工作计划管理
- 每日总结管理
- 任务分类管理
-
系统管理模块
- 轮播图管理
- 公告信息管理
- 系统参数配置
2.3 数据库设计
数据库设计遵循第三范式,主要包含以下表结构:
-
用户表(user)
sql复制CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL COMMENT '用户名', `password` varchar(100) NOT NULL COMMENT '密码', `real_name` varchar(50) DEFAULT NULL COMMENT '真实姓名', `phone` varchar(20) DEFAULT NULL COMMENT '手机号', `email` varchar(50) DEFAULT NULL COMMENT '邮箱', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `idx_username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -
任务表(task)
sql复制CREATE TABLE `task` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL COMMENT '用户ID', `title` varchar(100) NOT NULL COMMENT '任务标题', `content` text COMMENT '任务内容', `type_id` int(11) DEFAULT NULL COMMENT '任务类型ID', `priority` tinyint(4) DEFAULT '0' COMMENT '优先级(0-普通,1-重要,2-紧急)', `status` tinyint(4) DEFAULT '0' COMMENT '状态(0-未开始,1-进行中,2-已完成)', `start_time` datetime DEFAULT NULL COMMENT '开始时间', `end_time` datetime DEFAULT NULL COMMENT '结束时间', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_user_id` (`user_id`), KEY `idx_type_id` (`type_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -
任务类型表(task_type)
sql复制CREATE TABLE `task_type` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL COMMENT '类型名称', `description` varchar(200) DEFAULT NULL COMMENT '类型描述', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
注意:实际开发中,所有表字段都应添加适当的注释,并建立必要的索引以提高查询效率。密码字段应当使用加密存储(如BCrypt)。
3. 核心功能实现
3.1 用户认证与授权
系统采用基于Token的认证机制,流程如下:
- 用户登录成功后,后端生成JWT Token
- Token返回给客户端保存
- 后续请求在Header中携带Token
- 服务端验证Token有效性
关键代码实现:
java复制// JWT工具类
public class JwtUtil {
private static final String SECRET_KEY = "your-secret-key";
private static final long EXPIRATION_TIME = 86400000; // 24小时
public static String generateToken(User user) {
return Jwts.builder()
.setSubject(user.getUsername())
.claim("userId", user.getId())
.claim("role", user.getRole())
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME))
.signWith(SignatureAlgorithm.HS256, SECRET_KEY)
.compact();
}
public static Claims parseToken(String token) {
return Jwts.parser()
.setSigningKey(SECRET_KEY)
.parseClaimsJws(token)
.getBody();
}
}
// 登录接口
@RestController
@RequestMapping("/api/auth")
public class AuthController {
@Autowired
private UserService userService;
@PostMapping("/login")
public Result login(@RequestBody LoginDTO loginDTO) {
User user = userService.findByUsername(loginDTO.getUsername());
if(user == null || !passwordEncoder.matches(loginDTO.getPassword(), user.getPassword())) {
return Result.error("用户名或密码错误");
}
String token = JwtUtil.generateToken(user);
return Result.success(token);
}
}
3.2 任务管理功能
任务管理是系统的核心功能,主要包括:
-
任务CRUD操作
- 创建任务
- 编辑任务
- 删除任务
- 查询任务列表
-
任务状态流转
- 未开始 → 进行中
- 进行中 → 已完成
- 任务延期处理
-
任务筛选与搜索
- 按类型筛选
- 按状态筛选
- 按优先级筛选
- 关键词搜索
关键实现代码:
java复制@Service
public class TaskServiceImpl implements TaskService {
@Autowired
private TaskMapper taskMapper;
@Override
public PageInfo<TaskVO> getTaskList(TaskQueryDTO queryDTO) {
PageHelper.startPage(queryDTO.getPageNum(), queryDTO.getPageSize());
List<Task> taskList = taskMapper.selectByCondition(queryDTO);
List<TaskVO> voList = taskList.stream().map(task -> {
TaskVO vo = new TaskVO();
BeanUtils.copyProperties(task, vo);
// 设置类型名称等额外信息
return vo;
}).collect(Collectors.toList());
return new PageInfo<>(voList);
}
@Override
@Transactional
public void addTask(TaskDTO taskDTO) {
Task task = new Task();
BeanUtils.copyProperties(taskDTO, task);
task.setStatus(0); // 默认未开始
task.setCreateTime(new Date());
task.setUpdateTime(new Date());
taskMapper.insert(task);
}
@Override
@Transactional
public void updateTaskStatus(Integer taskId, Integer status) {
Task task = taskMapper.selectByPrimaryKey(taskId);
if(task == null) {
throw new BusinessException("任务不存在");
}
task.setStatus(status);
task.setUpdateTime(new Date());
taskMapper.updateByPrimaryKey(task);
}
}
3.3 每日总结功能
每日总结功能帮助用户回顾一天的工作,主要特点:
- 总结模板:提供结构化模板(工作内容、收获、问题)
- 关联任务:可关联当天完成的任务
- 总结回顾:支持按日期查看历史总结
实现要点:
java复制@RestController
@RequestMapping("/api/summary")
public class SummaryController {
@Autowired
private SummaryService summaryService;
@PostMapping
public Result addSummary(@RequestBody SummaryDTO summaryDTO) {
summaryService.addSummary(summaryDTO);
return Result.success();
}
@GetMapping("/list")
public Result getSummaryList(@RequestParam(required = false) String startDate,
@RequestParam(required = false) String endDate) {
List<SummaryVO> list = summaryService.getSummaryList(startDate, endDate);
return Result.success(list);
}
@GetMapping("/{id}")
public Result getSummaryDetail(@PathVariable Integer id) {
SummaryVO detail = summaryService.getSummaryDetail(id);
return Result.success(detail);
}
}
4. 系统部署与测试
4.1 环境准备
-
开发环境配置
- JDK 1.8安装与配置
- Maven环境配置
- MySQL安装与配置
- Tomcat服务器配置
-
数据库初始化
- 创建数据库和用户
- 执行SQL脚本初始化表结构
- 导入基础数据(如任务类型)
4.2 后端部署
-
项目打包
bash复制
mvn clean package -DskipTests -
部署到Tomcat
- 将生成的war包复制到Tomcat的webapps目录
- 启动Tomcat服务器
-
配置修改
- 数据库连接配置(application.properties)
- 文件上传路径配置
- 服务器端口配置
4.3 前端打包与安装
-
Android项目打包
- 配置API基础地址
- 生成签名密钥
- 构建APK文件
-
安装测试
- 通过ADB安装到测试设备
- 测试各功能模块
- 修复发现的bug
4.4 系统测试
-
功能测试
- 用户注册登录测试
- 任务管理功能测试
- 每日总结功能测试
- 系统管理功能测试
-
性能测试
- 使用JMeter模拟多用户并发
- 测试接口响应时间
- 测试数据库查询性能
-
安全测试
- SQL注入测试
- XSS攻击测试
- 权限越界测试
5. 开发经验与优化建议
5.1 开发中遇到的问题
-
跨域问题
- 现象:前端访问后端API时出现跨域错误
- 解决方案:在后端配置CORS过滤器
java复制@Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowedMethods("GET", "POST", "PUT", "DELETE") .allowedHeaders("*") .maxAge(3600); } } -
MyBatis懒加载问题
- 现象:JSON序列化时触发懒加载导致异常
- 解决方案:使用@JsonIgnoreProperties注解或在DTO中转换
-
Android列表刷新问题
- 现象:列表数据更新后UI不同步
- 解决方案:使用RecyclerView配合DiffUtil高效更新
5.2 性能优化建议
-
数据库优化
- 为常用查询字段添加索引
- 避免SELECT *,只查询需要的字段
- 对大表考虑分表分库
-
缓存策略
- 引入Redis缓存常用数据
- 对任务列表等数据添加缓存
- 合理设置缓存过期时间
-
前端优化
- 图片等资源压缩
- 使用WebP格式图片
- 列表分页加载
5.3 功能扩展方向
-
多端同步
- 开发微信小程序版本
- 开发PC网页版
- 实现多端数据同步
-
智能提醒
- 基于任务优先级和截止时间的智能提醒
- 支持多种提醒方式(应用内、短信、邮件)
-
数据分析
- 任务完成率统计
- 工作效率分析
- 生成可视化报表
-
团队协作
- 添加团队任务管理功能
- 任务分配与跟踪
- 团队进度看板
在实际开发过程中,我发现任务管理系统的核心在于简单易用。过于复杂的功能反而会降低用户体验。因此,在后续迭代中,我会坚持"少即是多"的设计原则,优先优化核心功能的用户体验,而不是盲目添加新功能。