基于java的养生药膳食疗系统的设计与实现 - 代码讲解文档

在这里插入图片描述

一、项目概述

本项目是一个基于Java SpringBoot框架开发的养生药膳食疗系统,旨在为用户提供药膳信息查询、养生知识学习和专家咨询等功能。系统采用前后端分离架构,后端基于SpringBoot框架,前端使用Vue技术栈,数据库采用MySQL。

项目定位

  • 提供药膳信息展示和分类查询功能
  • 提供养生保健知识科普
  • 提供专家在线咨询和信息发布功能
  • 提供用户交流和反馈渠道

技术选型

技术层 技术选型
后端框架 SpringBoot 2.x
ORM框架 MyBatis-Plus
数据库 MySQL 5.7
前端框架 Vue.js
认证方式 Token机制

二、技术架构

2.1 系统架构图

┌─────────────────────────────────────────────────────────────┐
│                      前端展示层 (Vue.js)                      │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐        │
│  │ 用户端   │ │ 专家端   │ │ 管理端   │ │ 论坛模块 │        │
│  └──────────┘ └──────────┘ └──────────┘ └──────────┘        │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                      后端业务层 (SpringBoot)                  │
│  ┌──────────────────────────────────────────────────────┐   │
│  │                    Controller层                       │   │
│  │  YaoshanxinxiController / YangshengxinxiController... │   │
│  └──────────────────────────────────────────────────────┘   │
│  ┌──────────────────────────────────────────────────────┐   │
│  │                    Service层                          │   │
│  │  YaoshanxinxiService / YangshengxinxiService...       │   │
│  └──────────────────────────────────────────────────────┘   │
│  ┌──────────────────────────────────────────────────────┐   │
│  │                    Dao/Mapper层                       │   │
│  │  YaoshanxinxiDao / YangshengxinxiDao...               │   │
│  └──────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                      数据持久层 (MySQL)                       │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐        │
│  │yaoshanxinxi│ │yangsheng..│ │ zhuanjia│ │  forum  │        │
│  └──────────┘ └──────────┘ └──────────┘ └──────────┘        │
└─────────────────────────────────────────────────────────────┘

2.2 项目目录结构

springboot2yi10509/
├── src/main/java/com/
│   ├── controller/              # 控制器层
│   │   ├── YaoshanxinxiController.java     # 药膳信息管理
│   │   ├── YaoshanfenleiController.java    # 药膳分类管理
│   │   ├── YangshengxinxiController.java   # 养生信息管理
│   │   ├── ZhuanjiaController.java         # 专家管理
│   │   ├── YonghuController.java           # 用户管理
│   │   ├── ForumController.java            # 论坛管理
│   │   ├── NewsController.java             # 新闻公告管理
│   │   ├── YijianfankuiController.java     # 意见反馈管理
│   │   └── ...
│   ├── service/                 # 服务层
│   │   ├── impl/                # 服务实现
│   │   ├── YaoshanxinxiService.java
│   │   └── ...
│   ├── dao/                     # 数据访问层
│   │   ├── YaoshanxinxiDao.java
│   │   └── ...
│   ├── entity/                  # 实体类
│   │   ├── YaoshanxinxiEntity.java      # 药膳信息实体
│   │   ├── YaoshanfenleiEntity.java     # 药膳分类实体
│   │   ├── YangshengxinxiEntity.java    # 养生信息实体
│   │   ├── ZhuanjiaEntity.java          # 专家实体
│   │   ├── YonghuEntity.java            # 用户实体
│   │   ├── ForumEntity.java             # 论坛实体
│   │   ├── NewsEntity.java              # 新闻公告实体
│   │   ├── StoreupEntity.java           # 收藏实体
│   │   ├── ChatmessageEntity.java       # 聊天消息实体
│   │   └── ...
│   ├── config/                  # 配置类
│   ├── interceptor/             # 拦截器
│   ├── annotation/              # 自定义注解
│   └── utils/                   # 工具类
└── db/
    └── springboot2yi10509.sql   # 数据库脚本

三、核心功能模块讲解

3.1 药膳信息管理模块

功能说明

药膳信息模块是系统的核心模块,负责药膳的详细信息展示,包括药膳名称、分类、功效、食材、制作步骤等。

实体类设计 - YaoshanxinxiEntity
@TableName("yaoshanxinxi")
public class YaoshanxinxiEntity<T> implements Serializable {
    @TableId(type = IdType.AUTO)
    private Long id;                     // 主键id
    
    private String yaoshanmingcheng;      // 药膳名称
    private String yaoshanfenlei;         // 药膳分类
    private String yaoshanzhaopian;       // 药膳照片
    private String yaoshangongxiao;       // 药膳功效
    private String shiyongrenqun;         // 适用人群
    private String yaoshanshipin;         // 药膳视频
    private String yaoshanshicai;         // 药膳食材
    private String zhizuobuzhou;          // 制作步骤
    private String pengrengongju;         // 烹饪工具
    private String yingyangchengfen;      // 营养成分
    private String yaoshanxiangqing;      // 药膳详情
    private String zhuanjiazhanghao;      // 专家账号
    private String zhuanjiaxingming;      // 专家姓名
    
    private Date clicktime;               // 最近点击时间
    private Integer clicknum;             // 点击次数
    private Integer discussnum;           // 评论数
    private Integer storeupnum;           // 收藏数
    
    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
    private Date addtime;                 // 创建时间
    
    // getter/setter方法...
}
Controller核心代码
@RestController
@RequestMapping("/yaoshanxinxi")
public class YaoshanxinxiController {
    @Autowired
    private YaoshanxinxiService yaoshanxinxiService;
    
    @Autowired
    private StoreupService storeupService;
    
    /**
     * 后台分页列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, YaoshanxinxiEntity yaoshanxinxi,
        HttpServletRequest request){
        // 专家只能查看自己发布的药膳
        String tableName = request.getSession().getAttribute("tableName").toString();
        if(tableName.equals("zhuanjia")) {
            yaoshanxinxi.setZhuanjiazhanghao((String)request.getSession().getAttribute("username"));
        }
        EntityWrapper<YaoshanxinxiEntity> ew = new EntityWrapper<YaoshanxinxiEntity>();
        PageUtils page = yaoshanxinxiService.queryPage(params, 
            MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yaoshanxinxi), params), params));
        return R.ok().put("data", page);
    }
    
    /**
     * 详情页面 - 增加点击次数
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        YaoshanxinxiEntity yaoshanxinxi = yaoshanxinxiService.selectById(id);
        // 点击次数+1
        yaoshanxinxi.setClicknum(yaoshanxinxi.getClicknum()+1);
        yaoshanxinxi.setClicktime(new Date());
        yaoshanxinxiService.updateById(yaoshanxinxi);
        yaoshanxinxi = yaoshanxinxiService.selectView(new EntityWrapper<YaoshanxinxiEntity>().eq("id", id));
        return R.ok().put("data", yaoshanxinxi);
    }
    
    /**
     * 智能排序 - 按点击量排序
     */
    @IgnoreAuth
    @RequestMapping("/autoSort")
    public R autoSort(@RequestParam Map<String, Object> params, YaoshanxinxiEntity yaoshanxinxi){
        params.put("sort", "clicknum");
        params.put("order", "desc");
        EntityWrapper<YaoshanxinxiEntity> ew = new EntityWrapper<YaoshanxinxiEntity>();
        PageUtils page = yaoshanxinxiService.queryPage(params, 
            MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yaoshanxinxi), params), params));
        return R.ok().put("data", page);
    }
}

3.2 药膳分类管理模块

功能说明

药膳分类模块用于对药膳进行分类管理,方便用户按类别查找药膳信息。

实体类设计 - YaoshanfenleiEntity

主要字段:

  • yaoshanfenlei: 药膳分类名称

3.3 养生信息管理模块

功能说明

养生信息模块提供养生保健知识的科普内容,包括养生方法、养生技巧等。

实体类设计 - YangshengxinxiEntity

主要字段:

  • yangshengmingcheng: 养生名称
  • yangshengfenlei: 养生分类
  • yangshengtupian: 养生图片
  • yangshenggongxiao: 养生功效
  • yangshengjieshao: 养生介绍
  • shiyongrenqun: 适用人群

3.4 专家管理模块

功能说明

专家管理模块管理系统的专家用户,专家可以发布药膳信息、养生知识等。

实体类设计 - ZhuanjiaEntity

主要字段:

  • zhuanjiazhanghao: 专家账号
  • mima: 密码
  • zhuanjiaxingming: 专家姓名
  • xingbie: 性别
  • zhicheng: 职称
  • zhuanjiajieshao: 专家介绍
  • touxiang: 头像

3.5 论坛交流模块

功能说明

论坛模块提供用户交流功能,用户可以发布帖子、评论互动。

实体类设计

ForumEntity - 论坛帖子

  • title: 帖子标题
  • content: 帖子内容
  • parentid: 父节点id(用于回复)
  • userid: 用户id
  • username: 用户名
  • avatarurl: 头像
  • isdone: 状态
  • istop: 是否置顶
  • typename: 分类名称

ForumtypeEntity - 论坛分类

  • typename: 分类名称

ForumreportEntity - 帖子举报

  • forumid: 论坛id
  • reason: 举报原因
  • status: 状态

3.6 意见反馈模块

功能说明

意见反馈模块收集用户对系统的反馈意见。

实体类设计 - YijianfankuiEntity

主要字段:

  • fankuibiaoti: 反馈标题
  • fankuineirong: 反馈内容
  • fankuishijian: 反馈时间
  • yonghuzhanghao: 用户账号

四、数据库设计分析

4.1 数据库表概览

表名 说明 主要字段
yaoshanxinxi 药膳信息表 yaoshanmingcheng, yaoshanfenlei, yaoshangongxiao
yaoshanfenlei 药膳分类表 yaoshanfenlei
yangshengxinxi 养生信息表 yangshengmingcheng, yangshenggongxiao
zhuanjia 专家表 zhuanjiazhanghao, zhuanjiaxingming
yonghu 用户表 yonghuzhanghao, mima
forum 论坛帖子表 title, content, userid
forumtype 论坛分类表 typename
forumreport 帖子举报表 reason, status
news 新闻公告表 title, content
newstype 新闻分类表 typename
storeup 收藏表 userid, refid
chatmessage 聊天消息表 content, uid, fid
yijianfankui 意见反馈表 fankuineirong

4.2 核心表结构详解

yaoshanxinxi(药膳信息表)
CREATE TABLE `yaoshanxinxi` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `yaoshanmingcheng` varchar(200) NOT NULL COMMENT '药膳名称',
  `yaoshanfenlei` varchar(200) NOT NULL COMMENT '药膳分类',
  `yaoshanzhaopian` longtext COMMENT '药膳照片',
  `yaoshangongxiao` varchar(200) COMMENT '药膳功效',
  `shiyongrenqun` varchar(200) COMMENT '适用人群',
  `yaoshanshipin` longtext COMMENT '药膳视频',
  `yaoshanshicai` varchar(200) COMMENT '药膳食材',
  `zhizuobuzhou` longtext COMMENT '制作步骤',
  `pengrengongju` varchar(200) COMMENT '烹饪工具',
  `yingyangchengfen` varchar(200) COMMENT '营养成分',
  `yaoshanxiangqing` longtext COMMENT '药膳详情',
  `zhuanjiazhanghao` varchar(200) COMMENT '专家账号',
  `zhuanjiaxingming` varchar(200) COMMENT '专家姓名',
  `clicktime` datetime COMMENT '最近点击时间',
  `clicknum` int(11) DEFAULT '0' COMMENT '点击次数',
  `discussnum` int(11) DEFAULT '0' COMMENT '评论数',
  `storeupnum` int(11) DEFAULT '0' COMMENT '收藏数',
  PRIMARY KEY (`id`),
  KEY `yaoshanfenlei` (`yaoshanfenlei`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='药膳信息';

4.3 数据库关系设计

┌─────────────┐     ┌─────────────┐
│yaoshanfenlei│────▶│yaoshanxinxi │
│ (药膳分类) │     │ (分类关联) │
└─────────────┘     └─────────────┘
                          │
                          ▼
┌─────────────┐     ┌─────────────┐
│  zhuanjia   │────▶│yaoshanxinxi │
│   (专家)    │     │ (专家发布) │
└─────────────┘     └─────────────┘

┌─────────────┐     ┌─────────────┐
│ forumtype   │────▶│   forum     │
│ (论坛分类) │     │ (帖子分类) │
└─────────────┘     └─────────────┘

五、关键代码解析

5.1 点击次数统计

系统记录用户浏览药膳信息的点击次数:

@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
    YaoshanxinxiEntity yaoshanxinxi = yaoshanxinxiService.selectById(id);
    // 点击次数+1
    yaoshanxinxi.setClicknum(yaoshanxinxi.getClicknum()+1);
    yaoshanxinxi.setClicktime(new Date());
    yaoshanxinxiService.updateById(yaoshanxinxi);
    return R.ok().put("data", yaoshanxinxi);
}

5.2 专家权限控制

专家只能管理自己发布的药膳:

@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, YaoshanxinxiEntity yaoshanxinxi,
    HttpServletRequest request){
    String tableName = request.getSession().getAttribute("tableName").toString();
    if(tableName.equals("zhuanjia")) {
        yaoshanxinxi.setZhuanjiazhanghao((String)request.getSession().getAttribute("username"));
    }
    // 查询时自动过滤专家账号
    EntityWrapper<YaoshanxinxiEntity> ew = new EntityWrapper<YaoshanxinxiEntity>();
    PageUtils page = yaoshanxinxiService.queryPage(params, 
        MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yaoshanxinxi), params), params));
    return R.ok().put("data", page);
}

5.3 评论功能

系统支持对药膳信息进行评论:

  • discussyaoshanxinxi表存储药膳评论
  • discussnum字段记录评论数统计

5.4 收藏功能

用户可以收藏感兴趣的药膳:

@Autowired
private StoreupService storeupService;

// 收藏信息存储
StoreupEntity storeupEntity = new StoreupEntity();
storeupEntity.setUserid(userId);
storeupEntity.setRefid(yaoshanxinxiId);
storeupEntity.setTablename("yaoshanxinxi");
storeupEntity.setType("1");
storeupService.insert(storeupEntity);

六、系统特色功能

6.1 药膳视频教程

系统支持上传药膳制作视频,用户可以通过视频学习药膳制作方法。

6.2 专家认证系统

专家用户可以发布药膳和养生信息,系统通过专家账号关联确保信息来源的可信度。

6.3 点击量智能排序

系统按点击次数自动排序,展示热门药膳:

params.put("sort", "clicknum");
params.put("order", "desc");

6.4 评论互动功能

用户可以对药膳和养生信息进行评论讨论。

6.5 论坛交流平台

提供论坛功能,支持:

  • 帖子发布与回复
  • 帖子分类管理
  • 帖子举报机制
  • 好友添加与聊天

6.6 养生知识科普

养生信息模块提供丰富的养生保健知识,包括养生功效、适用人群等信息。


七、运行与部署

7.1 数据库配置

spring:
  datasource:
    driverClassName: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springboot2yi10509
    username: root
    password: root

7.2 项目启动步骤

  1. 导入数据库脚本springboot2yi10509.sql
  2. 配置application.yml数据库连接
  3. 运行SpringBootApplication主类
  4. 访问前端页面

7.3 默认账号

  • 管理员:admin / admin
  • 用户账号:用户账号1 / 123456
  • 专家账号:专家账号1 / 123456

八、总结

本项目是一个专业的养生药膳食疗系统,实现了药膳信息管理、养生知识科普、专家咨询、论坛交流等功能。系统采用SpringBoot+MyBatis-Plus+Vue技术栈,具有清晰的分层架构。特色功能包括药膳视频教程、专家认证系统、点击量智能排序、评论互动等,为用户提供了全面的养生药膳学习平台。

更多推荐