1. 项目背景与意义
随着中医药文化传承与数字化发展的不断深入,公众对中医药知识的获取需求日益增长。然而,传统的中医药科普内容多分散于书籍、网站和短视频平台,存在信息碎片化、来源权威性不足、互动性较弱等问题。构建一个基于Spring Boot的中医药文化科普系统,能够将中医药基础知识、养生保健方法、经典方剂与名家医案等内容进行系统化整合,借助互联网平台实现高效传播,帮助公众科学、便捷地了解中医药文化。
从技术层面看,Spring Boot作为当前主流的Java后端开发框架,具有自动配置、快速启动、生态丰富等优势,适合用于构建结构清晰、易于维护的Web应用。本系统以Spring Boot为核心,结合前端页面与数据库设计,实现科普文章的发布与管理、分类检索、用户互动等功能,既锻炼了全栈开发能力,也为中医药文化传播提供了数字化载体。
2. 系统需求分析
2.1 功能需求
本系统面向普通用户和管理员两类角色,主要功能模块划分如下:
- 用户端:浏览中医药科普文章、按分类检索内容、查看热门推荐、收藏感兴趣的文章、发表评论与点赞。
- 管理端:管理员登录后,可对科普文章进行新增、编辑、删除与上下架操作,同时管理文章分类、用户评论和系统公告。
2.2 非功能需求
- 易用性:页面布局清晰,操作流程简洁,用户无需培训即可上手。
- 安全性:用户密码加密存储,管理员接口进行权限校验,防止未授权访问。
- 可维护性:采用分层架构设计,业务逻辑与数据访问分离,便于后续功能扩展。
3. 系统技术栈
本系统采用前后端分离的开发模式,具体技术选型如下:
| 层次 | 技术选型 | 说明 |
|---|---|---|
| 后端框架 | Spring Boot 2.7.x | 提供自动配置、内嵌Tomcat,简化项目搭建与部署 |
| 持久层框架 | MyBatis-Plus | 简化数据库操作,支持分页查询与条件构造器 |
| 数据库 | MySQL 8.0 | 存储用户、文章、分类、评论等业务数据 |
| 安全认证 | Spring Security + JWT | 实现用户登录认证与接口权限控制 |
| 前端框架 | Vue.js + Element UI | 构建管理后台界面,提供表格、表单等组件 |
| 前端页面 | Thymeleaf + Bootstrap | 用于用户端页面渲染与响应式布局 |
| 构建工具 | Maven | 管理项目依赖与构建流程 |
4. 系统架构设计
系统整体采用经典的三层架构,即表现层、业务逻辑层和数据访问层。表现层负责接收前端请求并返回JSON数据或页面视图;业务逻辑层封装核心业务规则,如文章发布流程、评论审核逻辑等;数据访问层通过MyBatis-Plus与MySQL数据库交互,完成数据的增删改查操作。
在权限控制方面,系统使用Spring Security框架统一管理认证与授权。用户登录成功后,后端签发JWT令牌,前端在后续请求中携带该令牌访问受保护的接口,管理员接口则通过角色注解进行访问控制。
5. 数据库设计
根据系统功能需求,核心数据表设计如下:
| 表名 | 主要字段 | 说明 |
|---|---|---|
| user | id, username, password, role, create_time | 存储用户账号信息,密码使用BCrypt加密 |
| category | id, name, description | 文章分类,如中药知识、养生保健、名家医案 |
| article | id, title, content, category_id, author_id, status, view_count, create_time | 科普文章主体内容,status控制上下架状态 |
| comment | id, article_id, user_id, content, create_time | 用户对文章的评论内容 |
| favorite | id, user_id, article_id, create_time | 用户收藏记录,联合唯一约束防止重复收藏 |
6. 核心功能实现
6.1 用户登录与JWT认证
用户登录接口接收前端提交的用户名和密码,通过UserDetailsService加载用户信息,并使用BCryptPasswordEncoder校验密码。认证成功后,系统生成JWT令牌返回给前端,后续请求通过拦截器解析令牌并设置用户上下文。
@RestController @RequestMapping("/api/auth") public class AuthController { @Autowired private AuthenticationManager authenticationManager; @Autowired private JwtTokenUtil jwtTokenUtil; @PostMapping("/login") public Result login(@RequestBody LoginRequest request) { Authentication authentication = authenticationManager.authenticate( new UsernamePasswordAuthenticationToken(request.getUsername(), request.getPassword()) ); SecurityContextHolder.getContext().setAuthentication(authentication); String token = jwtTokenUtil.generateToken(authentication.getName()); return Result.success(token); } }6.2 科普文章分页查询
文章列表接口支持按分类筛选和关键词搜索,使用MyBatis-Plus的分页插件实现高效查询。查询结果按发布时间倒序排列,并同步更新文章的浏览量。
@Service public class ArticleServiceImpl implements ArticleService { @Autowired private ArticleMapper articleMapper; @Override public Page<Article> getArticlePage(int pageNum, int pageSize, Long categoryId, String keyword) { Page<Article> page = new Page<>(pageNum, pageSize); LambdaQueryWrapper<Article> wrapper = new LambdaQueryWrapper<>(); if (categoryId != null) { wrapper.eq(Article::getCategoryId, categoryId); } if (StringUtils.hasText(keyword)) { wrapper.like(Article::getTitle, keyword); } wrapper.orderByDesc(Article::getCreateTime); return articleMapper.selectPage(page, wrapper); } }6.3 文章收藏功能
收藏功能通过favorite表实现,用户点击收藏按钮时,系统先检查是否已收藏,若未收藏则插入记录,否则提示用户已收藏。收藏列表接口根据当前登录用户查询其收藏的文章。
@Service public class FavoriteServiceImpl implements FavoriteService { @Autowired private FavoriteMapper favoriteMapper; @Override public boolean addFavorite(Long userId, Long articleId) { LambdaQueryWrapper<Favorite> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Favorite::getUserId, userId).eq(Favorite::getArticleId, articleId); if (favoriteMapper.selectCount(wrapper) > 0) { return false; } Favorite favorite = new Favorite(); favorite.setUserId(userId); favorite.setArticleId(articleId); return favoriteMapper.insert(favorite) > 0; } }7. 系统测试与总结
系统开发完成后,对用户注册登录、文章浏览、分类检索、收藏评论等核心功能进行了功能测试,测试结果表明各模块运行正常,接口响应符合预期。在性能方面,通过分页查询和索引优化,文章列表接口在数据量较大时仍能保持较快的响应速度。
本项目基于Spring Boot实现了中医药文化科普系统,涵盖了用户管理、内容管理、互动交流等核心功能,验证了Spring Boot在Web应用开发中的高效性与稳定性。后续可在内容推荐、视频科普、在线问答等方向进一步扩展,持续提升系统的实用价值与用户体验。