计算机毕业设计 基于Java的美食信息推荐系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌
🍅文末获取源码联系🍅
👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟
————————————————
计算机毕业设计《1000套》✌

目录

1、项目介绍及开发技术

1.1 项目介绍

1.2 开发技术

2、系统功能设计结构图

3、功能截图

3.1 前台功能

3.2 后台功能

4、数据库表结构设计

5、关键代码

5.1 菜谱Controller模块 

5.2 菜谱Service模块 

5.3 菜谱ServiceImpl模块

5.4 菜谱Dao模块

6、论文目录结构

7、源码获取


1、项目介绍及开发技术

1.1 项目介绍

现代社会,美食不仅是满足人们基本生存需求的方式,更是一种文化和生活方式的体现。随着互联网技术的发展,人们获取美食信息的途径日益多样化,但信息的碎片化和个性化需求的增长使得用户在海量的美食信息中寻找到适合自己的内容变得困难。因此,开发一个基于Java的美食信息推荐系统,能够根据用户的个人喜好和饮食习惯,智能推荐个性化的菜谱和饮食资讯,对于提升用户体验和满足用户需求具有重要意义。该系统的设计和实现还将涉及到用户界面(UI)的友好性、系统的可扩展性、数据的安全性和隐私保护等方面,这些都是当前互联网应用开发中的关键问题。通过本课题的研究,不仅可以推动美食信息推荐技术的创新,还可以为相关领域的研究和实践提供参考,具有较高的学术价值和实际应用价值。

1.2 开发技术

Java开发语言、SpringBoot、MyBatisPlus、MySQL数据库、Maven、IDEA开发工具、JDK1.8+、Vue、HTML、CSS、JS。

2、系统功能设计结构图

管理员:登录、首页、个人中心(修改密码、个人信息)、管理员管理、用户管理、菜谱管理、论坛管理、饮食资讯管理、基础数据管理(菜谱类型管理、口味管理、资讯类型管理)、轮播图管理。

用户:注册、登录、首页、菜谱、论坛、饮食资讯、个人中心(个人中心、菜谱)

3、功能截图

3.1 前台功能

登录

首页

菜谱

 论坛

饮食资讯

个人中心

3.2 后台功能

登录

首页

菜谱管理

 论坛管理

饮食资讯管理

4、数据库表结构设计

CREATE DATABASE /*!32312 IF NOT EXISTS*/`meishixinxituijianxitong` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `meishixinxituijianxitong`;

/*Table structure for table `caipu` */

DROP TABLE IF EXISTS `caipu`;

CREATE TABLE `caipu` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键 ',
  `caipu_name` varchar(200) DEFAULT NULL COMMENT '菜谱名称  Search111 ',
  `caipu_uuid_number` varchar(200) DEFAULT NULL COMMENT '菜谱编号',
  `caipu_photo` varchar(200) DEFAULT NULL COMMENT '菜谱照片',
  `caipu_weizhi` varchar(200) DEFAULT NULL COMMENT '小店位置',
  `caipu_video` varchar(200) DEFAULT NULL COMMENT '视频推荐',
  `caipu_jiage` decimal(10,2) DEFAULT NULL COMMENT '菜品价格 ',
  `caipu_types` int(11) DEFAULT NULL COMMENT '菜谱类型 Search111',
  `caipu_kouwei_types` int(11) DEFAULT NULL COMMENT '口味 Search111',
  `caipu_clicknum` int(11) DEFAULT NULL COMMENT '菜谱热度',
  `caipu_content` text COMMENT '菜品介绍 ',
  `insert_time` timestamp NULL DEFAULT NULL COMMENT '录入时间',
  `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间  show1 show2 photoShow',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='菜谱';

/*Data for the table `caipu` */

insert  into `caipu`(`id`,`caipu_name`,`caipu_uuid_number`,`caipu_photo`,`caipu_weizhi`,`caipu_video`,`caipu_jiage`,`caipu_types`,`caipu_kouwei_types`,`caipu_clicknum`,`caipu_content`,`insert_time`,`create_time`) values (1,'菜谱名称1','1677844866370','/upload/1677849348584.jpg','小店位置1','upload/video.mp4','787.31',1,4,309,'<p>菜品介绍1</p>','2023-03-03 20:01:06','2023-03-03 20:01:06'),(2,'菜谱名称2','1677844866345','/upload/1677849334456.jpg','小店位置2','upload/video.mp4','754.58',4,2,25,'<p>菜品介绍2</p>','2023-03-03 20:01:06','2023-03-03 20:01:06'),(4,'菜谱名称4','1677844866351','/upload/1677849308941.jpg','小店位置4','upload/video.mp4','544.14',1,3,105,'<p>菜品介绍4</p>','2023-03-03 20:01:06','2023-03-03 20:01:06'),(5,'菜谱名称5','1677844866361','/upload/1677849293852.jpg','小店位置5','upload/video.mp4','558.14',4,2,314,'<p>菜品介绍5</p>','2023-03-03 20:01:06','2023-03-03 20:01:06'),(6,'菜谱名称6','1677844866355','/upload/1677849281396.jpg','小店位置6','upload/video.mp4','65.88',3,3,385,'<p>菜品介绍6</p>','2023-03-03 20:01:06','2023-03-03 20:01:06'),(7,'菜谱名称7','1677844866346','/upload/1677849269378.jpg','小店位置7','upload/video.mp4','926.45',2,1,388,'<p>菜品介绍7</p>','2023-03-03 20:01:06','2023-03-03 20:01:06'),(8,'菜谱名称8','1677844866318','/upload/1677849256219.jpg','小店位置8','upload/video.mp4','378.70',4,1,148,'<p>菜品介绍8</p>','2023-03-03 20:01:06','2023-03-03 20:01:06'),(9,'菜谱名称9','1677844866317','/upload/1677849239928.jpg','小店位置9','upload/video.mp4','247.47',2,2,254,'<p>菜品介绍9</p>','2023-03-03 20:01:06','2023-03-03 20:01:06'),(10,'菜谱名称10','1677844866337','/upload/1677849225897.jpg','小店位置10','upload/video.mp4','425.23',2,4,86,'<p>菜品介绍10</p>','2023-03-03 20:01:06','2023-03-03 20:01:06'),(11,'菜谱名称11','1677844866334','/upload/1677849214174.jpg','小店位置11','upload/video.mp4','575.76',3,4,30,'<p>菜品介绍11</p>','2023-03-03 20:01:06','2023-03-03 20:01:06'),(12,'菜谱名称12','1677844866344','/upload/1677849203017.jpg','小店位置12','upload/video.mp4','331.12',1,4,405,'<p>菜品介绍12</p>','2023-03-03 20:01:06','2023-03-03 20:01:06'),(13,'菜谱名称13','1677844866319','/upload/1677849191928.jpg','小店位置13','upload/video.mp4','128.45',3,1,385,'<p>菜品介绍13</p>','2023-03-03 20:01:06','2023-03-03 20:01:06'),(14,'菜谱名称14','1677844866330','/upload/1677849181906.jpg','小店位置14','upload/video.mp4','810.27',2,4,118,'<p>菜品介绍14</p>','2023-03-03 20:01:06','2023-03-03 20:01:06');

/*Table structure for table `config` */

DROP TABLE IF EXISTS `config`;

CREATE TABLE `config` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(100) NOT NULL COMMENT '配置参数名称',
  `value` varchar(100) DEFAULT NULL COMMENT '配置参数值',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='配置文件';

/*Data for the table `config` */

insert  into `config`(`id`,`name`,`value`) values (1,'轮播图1','upload/config1.jpg'),(2,'轮播图2','upload/config2.jpg'),(3,'轮播图3','upload/config3.jpg');

/*Table structure for table `dictionary` */

DROP TABLE IF EXISTS `dictionary`;

CREATE TABLE `dictionary` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `dic_code` varchar(200) DEFAULT NULL COMMENT '字段',
  `dic_name` varchar(200) DEFAULT NULL COMMENT '字段名',
  `code_index` int(11) DEFAULT NULL COMMENT '编码',
  `index_name` varchar(200) DEFAULT NULL COMMENT '编码名字  Search111 ',
  `super_id` int(11) DEFAULT NULL COMMENT '父字段id',
  `beizhu` varchar(200) DEFAULT NULL COMMENT '备注',
  `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 COMMENT='字典';

/*Data for the table `dictionary` */

insert  into `dictionary`(`id`,`dic_code`,`dic_name`,`code_index`,`index_name`,`super_id`,`beizhu`,`create_time`) values (1,'sex_types','性别类型',1,'男',NULL,NULL,'2023-03-03 20:00:53'),(2,'sex_types','性别类型',2,'女',NULL,NULL,'2023-03-03 20:00:53'),(3,'caipu_types','菜谱类型',1,'菜谱类型1',NULL,NULL,'2023-03-03 20:00:53'),(4,'caipu_types','菜谱类型',2,'菜谱类型2',NULL,NULL,'2023-03-03 20:00:53'),(5,'caipu_types','菜谱类型',3,'菜谱类型3',NULL,NULL,'2023-03-03 20:00:53'),(6,'caipu_types','菜谱类型',4,'菜谱类型4',NULL,NULL,'2023-03-03 20:00:54'),(7,'caipu_kouwei_types','口味',1,'麻辣',NULL,NULL,'2023-03-03 20:00:54'),(8,'caipu_kouwei_types','口味',2,'鲜香',NULL,NULL,'2023-03-03 20:00:54'),(9,'caipu_kouwei_types','口味',3,'清淡',NULL,NULL,'2023-03-03 20:00:54'),(10,'caipu_kouwei_types','口味',4,'香辣',NULL,NULL,'2023-03-03 20:00:54'),(11,'forum_state_types','帖子状态',1,'发帖',NULL,NULL,'2023-03-03 20:00:54'),(12,'forum_state_types','帖子状态',2,'回帖',NULL,NULL,'2023-03-03 20:00:54'),(13,'forum_collection_types','收藏表类型',1,'收藏',NULL,NULL,'2023-03-03 20:00:54'),(14,'forum_collection_types','收藏表类型',2,'赞',NULL,NULL,'2023-03-03 20:00:54'),(15,'gonggao_types','资讯类型',1,'资讯类型1',NULL,NULL,'2023-03-03 20:00:54'),(16,'gonggao_types','资讯类型',2,'资讯类型2',NULL,NULL,'2023-03-03 20:00:54');

/*Table structure for table `forum` */

DROP TABLE IF EXISTS `forum`;

CREATE TABLE `forum` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `forum_name` varchar(200) DEFAULT NULL COMMENT '帖子标题  Search111 ',
  `yonghu_id` int(11) DEFAULT NULL COMMENT '用户',
  `users_id` int(11) DEFAULT NULL COMMENT '管理员',
  `forum_content` text COMMENT '发布内容',
  `zan_number` int(11) DEFAULT NULL COMMENT '赞',
  `cai_number` int(11) DEFAULT NULL COMMENT '踩',
  `super_ids` int(11) DEFAULT NULL COMMENT '父id',
  `forum_state_types` int(11) DEFAULT NULL COMMENT '帖子状态',
  `insert_time` timestamp NULL DEFAULT NULL COMMENT '发帖时间',
  `update_time` timestamp NULL DEFAULT NULL COMMENT '修改时间',
  `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show2',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='论坛';

/*Data for the table `forum` */

insert  into `forum`(`id`,`forum_name`,`yonghu_id`,`users_id`,`forum_content`,`zan_number`,`cai_number`,`super_ids`,`forum_state_types`,`insert_time`,`update_time`,`create_time`) values (1,'帖子标题1',1,NULL,'发布内容1',432,322,84,1,'2023-03-03 20:01:06','2023-03-03 20:01:06','2023-03-03 20:01:06'),(2,'帖子标题2',2,NULL,'发布内容2',343,257,420,1,'2023-03-03 20:01:06','2023-03-03 20:01:06','2023-03-03 20:01:06'),(3,'帖子标题3',2,NULL,'发布内容3',466,109,406,1,'2023-03-03 20:01:06','2023-03-03 20:01:06','2023-03-03 20:01:06'),(4,'帖子标题4',1,NULL,'发布内容4',352,219,247,1,'2023-03-03 20:01:06','2023-03-03 20:01:06','2023-03-03 20:01:06'),(5,'帖子标题5',2,NULL,'发布内容5',128,8,466,1,'2023-03-03 20:01:06','2023-03-03 20:01:06','2023-03-03 20:01:06'),(6,'帖子标题6',3,NULL,'发布内容6',253,404,144,1,'2023-03-03 20:01:06','2023-03-03 20:01:06','2023-03-03 20:01:06'),(7,'帖子标题7',3,NULL,'发布内容7',400,413,124,1,'2023-03-03 20:01:06','2023-03-03 20:01:06','2023-03-03 20:01:06'),(8,'帖子标题8',1,NULL,'发布内容8',236,411,31,1,'2023-03-03 20:01:06','2023-03-03 20:01:06','2023-03-03 20:01:06'),(9,'帖子标题9',3,NULL,'发布内容9',41,48,106,1,'2023-03-03 20:01:06','2023-03-03 20:01:06','2023-03-03 20:01:06'),(10,'帖子标题10',3,NULL,'发布内容10',242,156,145,1,'2023-03-03 20:01:06','2023-03-03 20:01:06','2023-03-03 20:01:06'),(11,'帖子标题11',2,NULL,'发布内容11',77,150,471,1,'2023-03-03 20:01:06','2023-03-03 20:01:06','2023-03-03 20:01:06'),(12,'帖子标题12',3,NULL,'发布内容12',330,195,204,1,'2023-03-03 20:01:06','2023-03-03 20:01:06','2023-03-03 20:01:06'),(13,'帖子标题13',1,NULL,'发布内容13',209,285,285,1,'2023-03-03 20:01:06','2023-03-03 21:25:48','2023-03-03 20:01:06'),(14,'帖子标题14',3,NULL,'发布内容14',206,424,36,1,'2023-03-03 20:01:06','2023-03-03 21:25:40','2023-03-03 20:01:06');

/*Table structure for table `forum_collection` */

DROP TABLE IF EXISTS `forum_collection`;

CREATE TABLE `forum_collection` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `forum_id` int(11) DEFAULT NULL COMMENT '论坛',
  `yonghu_id` int(11) DEFAULT NULL COMMENT '用户',
  `forum_collection_types` int(11) DEFAULT NULL COMMENT '类型',
  `insert_time` timestamp NULL DEFAULT NULL COMMENT '收藏时间',
  `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show3 photoShow',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8 COMMENT='论坛收藏';

/*Data for the table `forum_collection` */

insert  into `forum_collection`(`id`,`forum_id`,`yonghu_id`,`forum_collection_types`,`insert_time`,`create_time`) values (1,1,1,1,'2023-03-03 20:01:06','2023-03-03 20:01:06'),(2,2,3,1,'2023-03-03 20:01:06','2023-03-03 20:01:06'),(3,3,2,1,'2023-03-03 20:01:06','2023-03-03 20:01:06'),(4,4,2,1,'2023-03-03 20:01:06','2023-03-03 20:01:06'),(5,5,3,1,'2023-03-03 20:01:06','2023-03-03 20:01:06'),(6,6,2,1,'2023-03-03 20:01:06','2023-03-03 20:01:06'),(7,7,2,1,'2023-03-03 20:01:06','2023-03-03 20:01:06'),(8,8,1,1,'2023-03-03 20:01:06','2023-03-03 20:01:06'),(9,9,3,1,'2023-03-03 20:01:06','2023-03-03 20:01:06'),(10,10,2,1,'2023-03-03 20:01:06','2023-03-03 20:01:06'),(11,11,1,1,'2023-03-03 20:01:06','2023-03-03 20:01:06'),(12,12,3,1,'2023-03-03 20:01:06','2023-03-03 20:01:06'),(14,14,3,1,'2023-03-03 20:01:06','2023-03-03 20:01:06'),(17,14,1,2,'2023-03-03 21:25:40','2023-03-03 21:25:40');

/*Table structure for table `gonggao` */

DROP TABLE IF EXISTS `gonggao`;

CREATE TABLE `gonggao` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键 ',
  `gonggao_name` varchar(200) DEFAULT NULL COMMENT '饮食资讯 Search111  ',
  `gonggao_photo` varchar(200) DEFAULT NULL COMMENT '图片 ',
  `gonggao_types` int(11) NOT NULL COMMENT '资讯类型 Search111 ',
  `insert_time` timestamp NULL DEFAULT NULL COMMENT '公告发布时间 ',
  `gonggao_content` text COMMENT '资讯详情 ',
  `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show1 show2 nameShow',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='饮食资讯';

/*Data for the table `gonggao` */

insert  into `gonggao`(`id`,`gonggao_name`,`gonggao_photo`,`gonggao_types`,`insert_time`,`gonggao_content`,`create_time`) values (1,'饮食资讯1','upload/gonggao1.jpg',1,'2023-03-03 20:01:06','资讯详情1','2023-03-03 20:01:06'),(2,'饮食资讯2','upload/gonggao2.jpg',2,'2023-03-03 20:01:06','资讯详情2','2023-03-03 20:01:06'),(3,'饮食资讯3','upload/gonggao3.jpg',2,'2023-03-03 20:01:06','资讯详情3','2023-03-03 20:01:06'),(4,'饮食资讯4','upload/gonggao4.jpg',2,'2023-03-03 20:01:06','资讯详情4','2023-03-03 20:01:06'),(5,'饮食资讯5','upload/gonggao5.jpg',1,'2023-03-03 20:01:06','资讯详情5','2023-03-03 20:01:06'),(6,'饮食资讯6','upload/gonggao6.jpg',1,'2023-03-03 20:01:06','资讯详情6','2023-03-03 20:01:06'),(7,'饮食资讯7','upload/gonggao7.jpg',2,'2023-03-03 20:01:06','资讯详情7','2023-03-03 20:01:06'),(8,'饮食资讯8','upload/gonggao8.jpg',1,'2023-03-03 20:01:06','资讯详情8','2023-03-03 20:01:06'),(9,'饮食资讯9','upload/gonggao9.jpg',1,'2023-03-03 20:01:06','资讯详情9','2023-03-03 20:01:06'),(10,'饮食资讯10','upload/gonggao10.jpg',1,'2023-03-03 20:01:06','资讯详情10','2023-03-03 20:01:06'),(11,'饮食资讯11','upload/gonggao11.jpg',1,'2023-03-03 20:01:06','资讯详情11','2023-03-03 20:01:06'),(12,'饮食资讯12','upload/gonggao12.jpg',1,'2023-03-03 20:01:06','资讯详情12','2023-03-03 20:01:06'),(13,'饮食资讯13','upload/gonggao13.jpg',2,'2023-03-03 20:01:06','资讯详情13','2023-03-03 20:01:06'),(14,'饮食资讯14','upload/gonggao14.jpg',2,'2023-03-03 20:01:06','资讯详情14','2023-03-03 20:01:06');

/*Table structure for table `token` */

DROP TABLE IF EXISTS `token`;

CREATE TABLE `token` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `userid` bigint(20) NOT NULL COMMENT '用户id',
  `username` varchar(100) NOT NULL COMMENT '用户名',
  `tablename` varchar(100) DEFAULT NULL COMMENT '表名',
  `role` varchar(100) DEFAULT NULL COMMENT '角色',
  `token` varchar(200) NOT NULL COMMENT '密码',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '新增时间',
  `expiratedtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '过期时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='token表';

/*Data for the table `token` */

insert  into `token`(`id`,`userid`,`username`,`tablename`,`role`,`token`,`addtime`,`expiratedtime`) values (1,1,'a1','yonghu','用户','0h4dii6p8mmxo0vz9bykwivn7mjvdbix','2023-03-03 20:02:23','2023-03-03 22:25:06'),(2,1,'admin','users','管理员','ejeuo5614pbti20vshgnx3n9tqmjtkvi','2023-03-03 20:44:05','2023-03-03 22:37:20');

/*Table structure for table `users` */

DROP TABLE IF EXISTS `users`;

CREATE TABLE `users` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `username` varchar(100) NOT NULL COMMENT '用户名',
  `password` varchar(100) NOT NULL COMMENT '密码',
  `role` varchar(100) DEFAULT '管理员' COMMENT '角色',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '新增时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='管理员';

/*Data for the table `users` */

insert  into `users`(`id`,`username`,`password`,`role`,`addtime`) values (1,'admin','admin','管理员','2023-03-03 20:00:53');

/*Table structure for table `yonghu` */

DROP TABLE IF EXISTS `yonghu`;

CREATE TABLE `yonghu` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `username` varchar(200) DEFAULT NULL COMMENT '账户',
  `password` varchar(200) DEFAULT NULL COMMENT '密码',
  `yonghu_name` varchar(200) DEFAULT NULL COMMENT '用户姓名 Search111 ',
  `yonghu_phone` varchar(200) DEFAULT NULL COMMENT '用户手机号',
  `yonghu_id_number` varchar(200) DEFAULT NULL COMMENT '用户身份证号',
  `yonghu_photo` varchar(200) DEFAULT NULL COMMENT '用户头像',
  `sex_types` int(11) DEFAULT NULL COMMENT '性别',
  `yonghu_email` varchar(200) DEFAULT NULL COMMENT '电子邮箱',
  `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='用户';

/*Data for the table `yonghu` */

insert  into `yonghu`(`id`,`username`,`password`,`yonghu_name`,`yonghu_phone`,`yonghu_id_number`,`yonghu_photo`,`sex_types`,`yonghu_email`,`create_time`) values (1,'a1','123456','用户姓名1','17703786901','410224199010102001','upload/yonghu1.jpg',1,'1@qq.com','2023-03-03 20:01:06'),(2,'a2','123456','用户姓名2','17703786902','410224199010102002','upload/yonghu2.jpg',2,'2@qq.com','2023-03-03 20:01:06'),(3,'a3','123456','用户姓名3','17703786903','410224199010102003','upload/yonghu3.jpg',2,'3@qq.com','2023-03-03 20:01:06');

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

5、关键代码

5.1 菜谱Controller模块 

/**
 * 菜谱
 * 后端接口
 * @author 学长编程
 * @email
*/
@RestController
@Controller
@RequestMapping("/caipu")
public class CaipuController {
    private static final Logger logger = LoggerFactory.getLogger(CaipuController.class);

    private static final String TABLE_NAME = "caipu";

    @Autowired
    private CaipuService caipuService;

    @Autowired
    private TokenService tokenService;
    @Autowired
    private DictionaryService dictionaryService;

    //级联表非注册的service
    //注册表service
    @Autowired
    private YonghuService yonghuService;


    /**
    * 后端列表
    */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永不会进入");
        else if("用户".equals(role))
            params.put("yonghuId",request.getSession().getAttribute("userId"));
        CommonUtil.checkMap(params);
        PageUtils page = caipuService.queryPage(params);

        //字典表数据转换
        List<CaipuView> list =(List<CaipuView>)page.getList();
        for(CaipuView c:list){
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(c, request);
        }
        return R.ok().put("data", page);
    }

    /**
    * 后端详情
    */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        CaipuEntity caipu = caipuService.selectById(id);
        if(caipu !=null){
            //entity转view
            CaipuView view = new CaipuView();
            BeanUtils.copyProperties( caipu , view );//把实体数据重构到view中
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view, request);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody CaipuEntity caipu, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,caipu:{}",this.getClass().getName(),caipu.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永远不会进入");

        Wrapper<CaipuEntity> queryWrapper = new EntityWrapper<CaipuEntity>()
            .eq("caipu_name", caipu.getCaipuName())
            .eq("caipu_weizhi", caipu.getCaipuWeizhi())
            .eq("caipu_video", caipu.getCaipuVideo())
            .eq("caipu_types", caipu.getCaipuTypes())
            .eq("caipu_kouwei_types", caipu.getCaipuKouweiTypes())
            .eq("caipu_clicknum", caipu.getCaipuClicknum())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        CaipuEntity caipuEntity = caipuService.selectOne(queryWrapper);
        if(caipuEntity==null){
            caipu.setCaipuClicknum(1);
            caipu.setInsertTime(new Date());
            caipu.setCreateTime(new Date());
            caipuService.insert(caipu);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 后端修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody CaipuEntity caipu, HttpServletRequest request) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException, InstantiationException {
        logger.debug("update方法:,,Controller:{},,caipu:{}",this.getClass().getName(),caipu.toString());
        CaipuEntity oldCaipuEntity = caipuService.selectById(caipu.getId());//查询原先数据

        String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(false)
//            return R.error(511,"永远不会进入");
        if("".equals(caipu.getCaipuPhoto()) || "null".equals(caipu.getCaipuPhoto())){
                caipu.setCaipuPhoto(null);
        }
        if("".equals(caipu.getCaipuVideo()) || "null".equals(caipu.getCaipuVideo())){
                caipu.setCaipuVideo(null);
        }

            caipuService.updateById(caipu);//根据id更新
            return R.ok();
    }

    /**
    * 删除
    */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids, HttpServletRequest request){
        logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
        List<CaipuEntity> oldCaipuList =caipuService.selectBatchIds(Arrays.asList(ids));//要删除的数据
        caipuService.deleteBatchIds(Arrays.asList(ids));

        return R.ok();
    }

    /**
     * 批量上传
     */
    @RequestMapping("/batchInsert")
    public R save( String fileName, HttpServletRequest request){
        logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
        Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")));
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            List<CaipuEntity> caipuList = new ArrayList<>();//上传的东西
            Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
            Date date = new Date();
            int lastIndexOf = fileName.lastIndexOf(".");
            if(lastIndexOf == -1){
                return R.error(511,"该文件没有后缀");
            }else{
                String suffix = fileName.substring(lastIndexOf);
                if(!".xls".equals(suffix)){
                    return R.error(511,"只支持后缀为xls的excel文件");
                }else{
                    URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
                    File file = new File(resource.getFile());
                    if(!file.exists()){
                        return R.error(511,"找不到上传文件,请联系管理员");
                    }else{
                        List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
                        dataList.remove(0);//删除第一行,因为第一行是提示
                        for(List<String> data:dataList){
                            //循环
                            CaipuEntity caipuEntity = new CaipuEntity();
//                            caipuEntity.setCaipuName(data.get(0));                    //菜谱名称 要改的
//                            caipuEntity.setCaipuUuidNumber(data.get(0));                    //菜谱编号 要改的
//                            caipuEntity.setCaipuPhoto("");//详情和图片
//                            caipuEntity.setCaipuWeizhi(data.get(0));                    //小店位置 要改的
//                            caipuEntity.setCaipuVideo(data.get(0));                    //视频推荐 要改的
//                            caipuEntity.setCaipuJiage(data.get(0));                    //菜品价格 要改的
//                            caipuEntity.setCaipuTypes(Integer.valueOf(data.get(0)));   //菜谱类型 要改的
//                            caipuEntity.setCaipuKouweiTypes(Integer.valueOf(data.get(0)));   //口味 要改的
//                            caipuEntity.setCaipuClicknum(Integer.valueOf(data.get(0)));   //菜谱热度 要改的
//                            caipuEntity.setCaipuContent("");//详情和图片
//                            caipuEntity.setInsertTime(date);//时间
//                            caipuEntity.setCreateTime(date);//时间
                            caipuList.add(caipuEntity);


                            //把要查询是否重复的字段放入map中
                                //菜谱编号
                                if(seachFields.containsKey("caipuUuidNumber")){
                                    List<String> caipuUuidNumber = seachFields.get("caipuUuidNumber");
                                    caipuUuidNumber.add(data.get(0));//要改的
                                }else{
                                    List<String> caipuUuidNumber = new ArrayList<>();
                                    caipuUuidNumber.add(data.get(0));//要改的
                                    seachFields.put("caipuUuidNumber",caipuUuidNumber);
                                }
                        }

                        //查询是否重复
                         //菜谱编号
                        List<CaipuEntity> caipuEntities_caipuUuidNumber = caipuService.selectList(new EntityWrapper<CaipuEntity>().in("caipu_uuid_number", seachFields.get("caipuUuidNumber")));
                        if(caipuEntities_caipuUuidNumber.size() >0 ){
                            ArrayList<String> repeatFields = new ArrayList<>();
                            for(CaipuEntity s:caipuEntities_caipuUuidNumber){
                                repeatFields.add(s.getCaipuUuidNumber());
                            }
                            return R.error(511,"数据库的该表中的 [菜谱编号] 字段已经存在 存在数据为:"+repeatFields.toString());
                        }
                        caipuService.insertBatch(caipuList);
                        return R.ok();
                    }
                }
            }
        }catch (Exception e){
            e.printStackTrace();
            return R.error(511,"批量插入数据异常,请联系管理员");
        }
    }

    /**
    * 前端列表
    */
    @IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));

        CommonUtil.checkMap(params);
        PageUtils page = caipuService.queryPage(params);

        //字典表数据转换
        List<CaipuView> list =(List<CaipuView>)page.getList();
        for(CaipuView c:list)
            dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段

        return R.ok().put("data", page);
    }

    /**
    * 前端详情
    */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        CaipuEntity caipu = caipuService.selectById(id);
            if(caipu !=null){

                //点击数量加1
                caipu.setCaipuClicknum(caipu.getCaipuClicknum()+1);
                caipuService.updateById(caipu);

                //entity转view
                CaipuView view = new CaipuView();
                BeanUtils.copyProperties( caipu , view );//把实体数据重构到view中

                //修改对应字典表字段
                dictionaryService.dictionaryConvert(view, request);
                return R.ok().put("data", view);
            }else {
                return R.error(511,"查不到数据");
            }
    }


    /**
    * 前端保存
    */
    @RequestMapping("/add")
    public R add(@RequestBody CaipuEntity caipu, HttpServletRequest request){
        logger.debug("add方法:,,Controller:{},,caipu:{}",this.getClass().getName(),caipu.toString());
        Wrapper<CaipuEntity> queryWrapper = new EntityWrapper<CaipuEntity>()
            .eq("caipu_name", caipu.getCaipuName())
            .eq("caipu_uuid_number", caipu.getCaipuUuidNumber())
            .eq("caipu_weizhi", caipu.getCaipuWeizhi())
            .eq("caipu_video", caipu.getCaipuVideo())
            .eq("caipu_types", caipu.getCaipuTypes())
            .eq("caipu_kouwei_types", caipu.getCaipuKouweiTypes())
            .eq("caipu_clicknum", caipu.getCaipuClicknum())
            ;
        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        CaipuEntity caipuEntity = caipuService.selectOne(queryWrapper);
        if(caipuEntity==null){
            caipu.setInsertTime(new Date());
            caipu.setCreateTime(new Date());
        caipuService.insert(caipu);

            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

}

5.2 菜谱Service模块 

package com.service;

import com.baomidou.mybatisplus.service.IService;
import com.utils.PageUtils;
import com.entity.CaipuEntity;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.lang.Nullable;
import java.util.List;

/**
 * 菜谱 服务类
 */
public interface CaipuService extends IService<CaipuEntity> {

    /**
    * @param params 查询参数
    * @return 带分页的查询出来的数据
    */
     PageUtils queryPage(Map<String, Object> params);

}

5.3 菜谱ServiceImpl模块

package com.service.impl;

import com.utils.StringUtil;
import com.service.DictionaryService;
import com.utils.ClazzDiff;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.util.*;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import com.utils.PageUtils;
import com.utils.Query;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import com.dao.CaipuDao;
import com.entity.CaipuEntity;
import com.service.CaipuService;
import com.entity.view.CaipuView;

/**
 * 菜谱 服务实现类
 */
@Service("caipuService")
@Transactional
public class CaipuServiceImpl extends ServiceImpl<CaipuDao, CaipuEntity> implements CaipuService {

    @Override
    public PageUtils queryPage(Map<String,Object> params) {
        Page<CaipuView> page =new Query<CaipuView>(params).getPage();
        page.setRecords(baseMapper.selectListView(page,params));
        return new PageUtils(page);
    }

}

5.4 菜谱Dao模块

package com.dao;

import com.entity.CaipuEntity;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.plugins.pagination.Pagination;

import org.apache.ibatis.annotations.Param;
import com.entity.view.CaipuView;

/**
 * 菜谱 Dao 接口
 *
 * @author  学长编程
 */
public interface CaipuDao extends BaseMapper<CaipuEntity> {

   List<CaipuView> selectListView(Pagination page,@Param("params")Map<String,Object> params);

}

6、论文目录结构

7、源码获取

感谢大家的阅读,如有不懂的问题可以评论区交流或私聊!

喜欢文章可以点赞、收藏、关注、评论

获取源码请私信

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/328325.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ARM day2、day3 汇编

一、汇编学习&#xff1a;可以向上理解软件、向下感知硬件 二、符号&#xff08;注释&#xff09; 注释#注释&#xff08;放在行首表示注释一行&#xff09;/* */注释#数字立即数&#xff1a;一种标号&#xff08;比如main: loop:&#xff09;.text .end换行…

spingboot 集成identityserver4身份验证

一、新建项目&#xff1a;com.saas.swaggerdemo 详情见&#xff1a;spring-boot2.7.8添加swagger-CSDN博客 在之前项目基础上添加如下依赖 <dependency><groupId>com.nimbusds</groupId><artifactId>nimbus-jose-jwt</artifactId><version&…

java版微信小程序商城 免 费 搭 建 java版直播商城平台规划及常见的营销模式有哪些?电商源码/小程序/三级分销

涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis …

7.5 MySQL对数据的基本操作(❤❤❤)

7.5 MySQL对数据的基本操作 1. 提要2. 数据添加2.1 insert语法2.2 insert 子查询2.3 ignore关键字 3. 数据修改3.1 update语句3.2 update表连接 4. 数据删除4.1 delete语句4.2 delete表连接4.3 快速删除数据表全部数据 1. 提要 2. 数据添加 2.1 insert语法 2.2 insert 子查询 …

Java实现在线编辑预览office文档

文章目录 1 在线编辑1.1 PageOffice简介1.2 前端项目1.2.1 配置1.2.2 页面部分 1.3 后端项目1.3.1 pom.xml1.3.2 添加配置1.3.3 controller 2 在线预览2.1 引言2.2 市面上现有的文件预览服务2.2.1 微软2.2.2 Google Drive查看器2.2.3 阿里云 IMM2.2.4 XDOC 文档预览2.2.5 Offic…

8个Python必备的PyCharm插件

大家好&#xff0c;在PyCharm中浏览插件列表并尝试很多人推荐的插件后&#xff0c;总结了几个瑰宝插件&#xff0c;它们各自以独特的方式帮助开发者快速、简便、愉悦地开发&#xff0c;接下来将逐个介绍它们。 1. Key Promoter X 【下载链接】&#xff1a;https://plugins.je…

Enzo Life Sciences--DNA损伤酶联免疫检测试剂盒DNA damage ELISA kit

——用于肿瘤、细胞凋亡和氧化应激研究中DNA损伤的快速检测 细胞暴露于氧化和环境应激经常导致基因组DNA的分解或氧化&#xff0c;评价基因组DNA完整性或评估氧化DNA存在的测定法经常用作验证凋亡或DNA损伤开始的手段。8-羟基-2 -脱氧鸟苷(8-OHdG)是一种修饰的核苷碱基&#xf…

vba设置excel单元格背景色

vba设置excel单元格背景色位蓝色 Sheet1.Cells(hang, 2).Interior.Color RGB(0, 0, 255) 参考链接 【VBA】给单元格设置背景色_vba 将一行底色置绿色-CSDN博客https://blog.csdn.net/s_h_m114_2/article/details/105787093 参考2 知乎 VBA--单元格的背景色设置 特此…

potplayer在投屏中的使用

视频播放完成之后自动停止 配置/语言/其他->收尾处理->播放完当前后停止 任务栏控制播放 快捷键 Enter 屏幕->全屏 CtrlEnter 屏幕->全屏(拉伸) CtrlShiftEnter 屏幕->全屏(其他显示器) AltEnter 屏幕->全屏 CtrlAltEnter 屏幕->全屏(保持比例) Space…

flink1.15 维表join guava cache和mysql方面优化

优化前 mysql响应慢,导致算子中数据输出追不上输入,导致显示cpu busy:100% 优化后效果两个图对应两个时刻: - - -- 优化前 select l.id,JSON_EXTRACT(r.msg,$$.key1) as msgv (select id,uid from tb1 l where id?) join (select uid,msg from tb2) r on l.uidr.uid;-- 优化…

STC51+TLC2543+ADXL335+proteus

51单片机解析adxl335振动检测蜂鸣器报警课设 通过按键调整振动检测阈值 传感器介绍 TLC2543&#xff1a;12 位精密模数转换器&#xff0c;原理图与引脚功能描述如下所示&#xff1a; 引脚功能1~9、11、12模拟量输入通道10GND电源地13REF-为负基准电压端14REF为正基准电压端…

腾讯云服务器入门教程——从0到1新手必看

腾讯云服务器入门教程包括云服务器CPU内存带宽配置选择&#xff0c;选择云服务器CVM或轻量应用服务器&#xff0c;云服务器创建后重置密码、远程连接、搭建程序环境、部署Web网站应用等&#xff0c;腾讯云服务器网txyfwq.com分享从0到1腾讯云服务器入门教程&#xff1a; 腾讯云…

记录在PyCharm中编辑配置自己的项目环境或路径

我们在复现或则跑项目时往往会遇到“设置参数” # 设置参数 ap argparse.ArgumentParser() ap.add_argument("-i", "--image", requiredTrue, help"path to input image") ap.add_argument("-t", "--template", requiredT…

【已解决】c语言const/指针学习笔记

本博文源于笔者正在复习const在左与在右&#xff0c;指针优先级、a,&a,*a的区别。 1、const在左与在右 int const *p const int *p int * const p int const * const p const int * const p* 在const右边&#xff0c;指向的数据不可以改变&#xff0c;可以改变地址 * 在c…

史上最全的数据科学与艺术

1.背景介绍 数据分析是一种将数据转化为价值的艺术和科学。它涉及到大量的数学、统计、编程、数据库、机器学习等多个领域的知识。数据分析的目的是从数据中提取有用的信息&#xff0c;以便做出明智的决策。 数据分析的艺术体现在数据分析师需要具备丰富的经验和洞察力&#…

SAP 客制化增强查找

相信各位在做日常的实施和运维中&#xff0c;经常会遇到这样一种情况&#xff0c;系统出现了非常规问题&#xff0c; 每次哼哧哼哧看半天源码&#xff0c;各种打watch point, 最后发现是以前别人写的增强导致的&#xff0c; 真的非常浪费时间。 那么我就想&#xff0c;有没有…

苹果手机自动重启是什么原因?本文帮你解决问题!

苹果手机是许多用户信赖和喜爱的手机品牌之一&#xff0c;但有时候它可能也会出现一些问题&#xff0c;其中比较常见的就是手机自动重启。那么&#xff0c;苹果手机自动重启是什么原因呢&#xff1f;今天&#xff0c;小编将在本文为您分析可能的原因&#xff0c;并提供相对应的…

什么情况下物理服务器会运行出错?

​  物理服务器&#xff0c;也称为裸机服务器&#xff0c;一般可以提供高性能计算水平和巨大的存储容量。然而&#xff0c;它们也难免会遇到一些问题。运行出错时&#xff0c;可能会导致停机和数据丢失。在这篇文章中&#xff0c;介绍了常见的物理服务器在一些情况下显示出错…

【蓝桥杯日记】第一篇——如何搭建系统环境

目录 前言 环境相关文件 学生机环境-Web应用开发环境&#xff08;第十五届大赛&#xff09; 学生机环境-Java编程环境&#xff08;第十五届大赛&#xff09; 学生机环境-C/C编程环境&#xff08;第十五届大赛&#xff09; 学生机环境-Python编程环境 &#xff08;第十五届…

【AD-3D预览-颜色更换和模型操作】AD打开3D预览模式,PCB板子显示蓝色,如何更改为绿色

问题&#xff1a;AD软件的3D预览模式中&#xff0c;PCB的颜色和其他不一样&#xff0c;显示的是蓝色&#xff0c;而且正面可以看到走线&#xff0c;背面看不到 原因&#xff1a; 这是因为选择的查看模式不一样所导致的。 备注&#xff1a;此处的菜单工具栏&#xff0c;可以在…