计算机毕业设计 基于协同过滤算法的体育商品推荐系统的设计与实现 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 项目介绍

近年来,随着互联网科技的进步和发展,人们的生活水平得到了极大的提高,图书的数量也在快速增加,以至于体育商品推荐的数量不断扩大,管理个性化智能体育商品推荐工作也日渐繁重。相比于传统的体育商品推荐方式,个性化智能的管理方式可以大幅提高体育商品推荐的管理效率,实现了个性化智能体育商品推荐的标准化、制度化、程序化的管理,有效地防止了体育商品推荐的随意管理,提高了信息的处理速度和精确度,能够及时、准确地查询和修正个性化智能体育商品推荐情况等信息。

1.2 开发技术

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

2、系统功能设计结构图

本课题基于协同过滤算法,主要采用java技术和MySQL数据库技术以及springboot框架进行开发。功能主要包括首页、个人中心、用户管理、商品分类管理、商品信息管理、交流论坛、留言板、系统管理、订单管理等功能,从而实现个性化智能体育商品推荐方式,提高个性化智能体育商品推荐的效率。

3、功能截图

3.1 前台功能

当人们打开系统的网址后,首先看到的就是首页界面。在这里,人们能够看到系统的导航条,通过导航条导航进入各功能展示页面进行操作。

系统注册:在系统注册页面的输入栏中输入用户注册信息进行注册操作。

系统登录:在系统登录页面的输入栏中输入用户名和密码进行登录。

个人中心:在个人中心页面可以对个人中心、我的发布、我的订单、我的地址和我的收藏进行详细操作。

后台管理,用户进入系统首页,在导航栏中点击后台管理,进入后台管理页面可以对密码和个人信息进行修改操作等进行操作。

3.2 后台功能

管理员登录,在登录页面正确输入用户名和密码后,进入操作系统进行操作。

管理员进入主页面,主要功能包括对首页、个人中心、用户管理、商品分类管理、商品信息管理、交流论坛、留言板、系统管理、订单管理等进行操作。

管理员点击用户管理,在用户页面输入用户账号进行查询、新增或删除用户列表,并根据需要对用户详情信息进行详情、修改或删除操作。

管理员点击商品分类管理。在商品分类页面输入商品分类进行查询、新增或删除商品分类列表,并根据需要对商品分类信息进行修改或删除操作。

管理员点击商品信息管理。在商品信息页面输入商品分类进行查询、新增或删除商品信息列表,并根据需要对商品信息进行详情、修改、查看评论或删除操作。

管理员点击交流论坛管理。在交流论坛页面输入帖子标题进行查询、新增或删除交流论坛列表,并根据需要对交流论坛信息进行详情、修改、查看评论或删除操作。

管理员点击留言板管理。在留言板页面输入商品分类进行查询或删除留言板列表,并根据需要对留言板信息进行修改或删除操作。

管理员点击系统管理。在关于我们页面输入标题进行查询关于我们列表,并根据需要对关于我们详细信息进行详情或修改操作,还可以对公告资讯、系统简介和轮播图管理进行详细操作。

管理员点击订单管理。在已支付订单页面输入订单编号和商品名称进行查询或删除已支付订单列表,并根据需要对已支付订单详细信息进行详情、发货或删除操作,还可以对已发货订单、已完成订单、已取消订单、已退款订单和未支付订单进行详细操作。

4、数据库表结构设计

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `springboott81xg` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;

USE `springboott81xg`;

--
-- Table structure for table `aboutus`
--

DROP TABLE IF EXISTS `aboutus`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `aboutus` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `title` varchar(200) NOT NULL COMMENT '标题',
  `subtitle` varchar(200) DEFAULT NULL COMMENT '副标题',
  `content` longtext NOT NULL COMMENT '内容',
  `picture1` longtext COMMENT '图片1',
  `picture2` longtext COMMENT '图片2',
  `picture3` longtext COMMENT '图片3',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='关于我们';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `aboutus`
--

LOCK TABLES `aboutus` WRITE;
/*!40000 ALTER TABLE `aboutus` DISABLE KEYS */;
INSERT INTO `aboutus` VALUES (1,'2023-02-14 13:19:42','关于我们','ABOUT US','不管你想要怎样的生活,你都要去努力争取,不多尝试一些事情怎么知道自己适合什么、不适合什么呢?\n你说你喜欢读书,让我给你列书单,你还问我哪里有那么多时间看书;你说自己梦想的职业是广告文案,问我如何成为一个文案,应该具备哪些素质;你说你计划晨跑,但总是因为学习、工作辛苦或者身体不舒服第二天起不了床;你说你一直梦想一个人去长途旅行,但是没钱,父母觉得危险。其实,我已经厌倦了你这样说说而已的把戏,我觉得就算我告诉你如何去做,你也不会照做,因为你根本什么都不做。','upload/aboutus_picture1.jpg','upload/aboutus_picture2.jpg','upload/aboutus_picture3.jpg');
/*!40000 ALTER TABLE `aboutus` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `address`
--

DROP TABLE IF EXISTS `address`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `address` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `userid` bigint(20) NOT NULL COMMENT '用户id',
  `address` varchar(200) NOT NULL COMMENT '地址',
  `name` varchar(200) NOT NULL COMMENT '收货人',
  `phone` varchar(200) NOT NULL COMMENT '电话',
  `isdefault` varchar(200) NOT NULL COMMENT '是否默认地址[是/否]',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1676380926115 DEFAULT CHARSET=utf8 COMMENT='地址';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `address`
--

LOCK TABLES `address` WRITE;
/*!40000 ALTER TABLE `address` DISABLE KEYS */;
INSERT INTO `address` VALUES (1,'2023-02-14 13:19:42',11,'宇宙银河系金星1号','金某','13823888881','是'),(2,'2023-02-14 13:19:42',12,'宇宙银河系木星1号','木某','13823888882','是'),(3,'2023-02-14 13:19:42',13,'宇宙银河系水星1号','水某','13823888883','是'),(4,'2023-02-14 13:19:42',14,'宇宙银河系火星1号','火某','13823888884','是'),(5,'2023-02-14 13:19:42',15,'宇宙银河系土星1号','土某','13823888885','是'),(6,'2023-02-14 13:19:42',16,'宇宙银河系月球1号','月某','13823888886','是'),(7,'2023-02-14 13:19:42',17,'宇宙银河系黑洞1号','黑某','13823888887','是'),(8,'2023-02-14 13:19:42',18,'宇宙银河系地球1号','地某','13823888888','是'),(1676380926114,'2023-02-14 13:22:05',1676380903839,'阳光大厦V101','11','13525252525','是');
/*!40000 ALTER TABLE `address` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `cart`
--

DROP TABLE IF EXISTS `cart`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `cart` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `tablename` varchar(200) DEFAULT 'shangpinxinxi' COMMENT '商品表名',
  `userid` bigint(20) NOT NULL COMMENT '用户id',
  `goodid` bigint(20) NOT NULL COMMENT '商品id',
  `goodname` varchar(200) DEFAULT NULL COMMENT '商品名称',
  `picture` longtext COMMENT '图片',
  `buynumber` int(11) NOT NULL COMMENT '购买数量',
  `price` float DEFAULT NULL COMMENT '单价',
  `discountprice` float DEFAULT NULL COMMENT '会员价',
  `goodtype` varchar(200) DEFAULT NULL COMMENT '商品类型',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='购物车表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `cart`
--

LOCK TABLES `cart` WRITE;
/*!40000 ALTER TABLE `cart` DISABLE KEYS */;
/*!40000 ALTER TABLE `cart` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `config`
--

DROP TABLE IF EXISTS `config`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
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='配置文件';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `config`
--

LOCK TABLES `config` WRITE;
/*!40000 ALTER TABLE `config` DISABLE KEYS */;
INSERT INTO `config` VALUES (1,'picture1','upload/picture1.jpg'),(2,'picture2','upload/picture2.jpg'),(3,'picture3','upload/picture3.jpg');
/*!40000 ALTER TABLE `config` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `discussshangpinxinxi`
--

DROP TABLE IF EXISTS `discussshangpinxinxi`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `discussshangpinxinxi` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `refid` bigint(20) NOT NULL COMMENT '关联表id',
  `userid` bigint(20) NOT NULL COMMENT '用户id',
  `avatarurl` longtext COMMENT '头像',
  `nickname` varchar(200) DEFAULT NULL COMMENT '用户名',
  `content` longtext NOT NULL COMMENT '评论内容',
  `reply` longtext COMMENT '回复内容',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1676381221299 DEFAULT CHARSET=utf8 COMMENT='商品信息评论表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `discussshangpinxinxi`
--

LOCK TABLES `discussshangpinxinxi` WRITE;
/*!40000 ALTER TABLE `discussshangpinxinxi` DISABLE KEYS */;
INSERT INTO `discussshangpinxinxi` VALUES (1676381217373,'2023-02-14 13:26:57',32,1676380903839,'upload/1676380898292.png','11','订单确认后可对商品进行评价','谢谢评价'),(1676381221298,'2023-02-14 13:27:00',32,1676380903839,'upload/1676380898292.png','11','666',NULL);
/*!40000 ALTER TABLE `discussshangpinxinxi` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Dumping data for table `forum`
--

LOCK TABLES `forum` WRITE;
/*!40000 ALTER TABLE `forum` DISABLE KEYS */;
INSERT INTO `forum` VALUES (41,'2023-02-14 13:19:42','帖子标题1','帖子内容1',0,1,'用户名1','upload/forum_avatarurl1.jpg,upload/forum_avatarurl2.jpg,upload/forum_avatarurl3.jpg','开放'),(42,'2023-02-14 13:19:42','帖子标题2','帖子内容2',0,2,'用户名2','upload/forum_avatarurl2.jpg,upload/forum_avatarurl3.jpg,upload/forum_avatarurl4.jpg','开放'),(43,'2023-02-14 13:19:42','帖子标题3','帖子内容3',0,3,'用户名3','upload/forum_avatarurl3.jpg,upload/forum_avatarurl4.jpg,upload/forum_avatarurl5.jpg','开放'),(44,'2023-02-14 13:19:42','帖子标题4','帖子内容4',0,4,'用户名4','upload/forum_avatarurl4.jpg,upload/forum_avatarurl5.jpg,upload/forum_avatarurl6.jpg','开放'),(45,'2023-02-14 13:19:42','帖子标题5','帖子内容5',0,5,'用户名5','upload/forum_avatarurl5.jpg,upload/forum_avatarurl6.jpg,upload/forum_avatarurl7.jpg','开放'),(46,'2023-02-14 13:19:42','帖子标题6','帖子内容6',0,6,'用户名6','upload/forum_avatarurl6.jpg,upload/forum_avatarurl7.jpg,upload/forum_avatarurl8.jpg','开放'),(47,'2023-02-14 13:19:42','帖子标题7','帖子内容7',0,7,'用户名7','upload/forum_avatarurl7.jpg,upload/forum_avatarurl8.jpg,upload/forum_avatarurl9.jpg','开放'),(48,'2023-02-14 13:19:42','帖子标题8','帖子内容8',0,8,'用户名8','upload/forum_avatarurl8.jpg,upload/forum_avatarurl9.jpg,upload/forum_avatarurl10.jpg','开放'),(1676380966728,'2023-02-14 13:22:46','用户发贴','<p>棋魂牵梦萦 奇葩厅</p><p><img src=\"data:image/jpeg;base64,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\"></p>',0,1676380903839,'11',NULL,'开放'),(1676380975953,'2023-02-14 13:22:54',NULL,'用户回贴',41,1676380903839,'11','upload/1676380898292.png',NULL);
/*!40000 ALTER TABLE `forum` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `messages`
--

DROP TABLE IF EXISTS `messages`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `messages` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `userid` bigint(20) NOT NULL COMMENT '留言人id',
  `username` varchar(200) DEFAULT NULL COMMENT '用户名',
  `avatarurl` longtext COMMENT '头像',
  `content` longtext NOT NULL COMMENT '留言内容',
  `cpicture` longtext COMMENT '留言图片',
  `reply` longtext COMMENT '回复内容',
  `rpicture` longtext COMMENT '回复图片',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1676381015801 DEFAULT CHARSET=utf8 COMMENT='留言板';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `messages`
--

LOCK TABLES `messages` WRITE;
/*!40000 ALTER TABLE `messages` DISABLE KEYS */;
INSERT INTO `messages` VALUES (121,'2023-02-14 13:19:42',1,'用户名1','upload/messages_avatarurl1.jpg','留言内容1','upload/messages_cpicture1.jpg','回复内容1','upload/messages_rpicture1.jpg'),(122,'2023-02-14 13:19:42',2,'用户名2','upload/messages_avatarurl2.jpg','留言内容2','upload/messages_cpicture2.jpg','回复内容2','upload/messages_rpicture2.jpg'),(123,'2023-02-14 13:19:42',3,'用户名3','upload/messages_avatarurl3.jpg','留言内容3','upload/messages_cpicture3.jpg','回复内容3','upload/messages_rpicture3.jpg'),(124,'2023-02-14 13:19:42',4,'用户名4','upload/messages_avatarurl4.jpg','留言内容4','upload/messages_cpicture4.jpg','回复内容4','upload/messages_rpicture4.jpg'),(125,'2023-02-14 13:19:42',5,'用户名5','upload/messages_avatarurl5.jpg','留言内容5','upload/messages_cpicture5.jpg','回复内容5','upload/messages_rpicture5.jpg'),(126,'2023-02-14 13:19:42',6,'用户名6','upload/messages_avatarurl6.jpg','留言内容6','upload/messages_cpicture6.jpg','回复内容6','upload/messages_rpicture6.jpg'),(127,'2023-02-14 13:19:42',7,'用户名7','upload/messages_avatarurl7.jpg','留言内容7','upload/messages_cpicture7.jpg','回复内容7','upload/messages_rpicture7.jpg'),(128,'2023-02-14 13:19:42',8,'用户名8','upload/messages_avatarurl8.jpg','留言内容8','upload/messages_cpicture8.jpg','回复内容8','upload/messages_rpicture8.jpg'),(1676381015800,'2023-02-14 13:23:35',1676380903839,'11','upload/1676380898292.png','用户留言','upload/1676381014755.jpg','可回复留言',NULL);
/*!40000 ALTER TABLE `messages` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `news`
--

DROP TABLE IF EXISTS `news`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `news` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `title` varchar(200) NOT NULL COMMENT '标题',
  `introduction` longtext COMMENT '简介',
  `picture` longtext NOT NULL COMMENT '图片',
  `content` longtext NOT NULL COMMENT '内容',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=99 DEFAULT CHARSET=utf8 COMMENT='公告资讯';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `news`
--

LOCK TABLES `news` WRITE;
/*!40000 ALTER TABLE `news` DISABLE KEYS */;
INSERT INTO `news` VALUES (91,'2023-02-14 13:19:42','有梦想,就要努力去实现','不管你想要怎样的生活,你都要去努力争取,不多尝试一些事情怎么知道自己适合什么、不适合什么呢?你说你喜欢读书,让我给你列书单,你还问我哪里有那么多时间看书;你说自己梦想的职业是广告文案,问我如何成为一个文案,应该具备哪些素质;你说你计划晨跑,但总是因为学习、工作辛苦或者身体不舒服第二天起不了床;你说你一直梦想一个人去长途旅行,但是没钱,父母觉得危险。','upload/news_picture1.jpg','<p>不管你想要怎样的生活,你都要去努力争取,不多尝试一些事情怎么知道自己适合什么、不适合什么呢?</p><p>你说你喜欢读书,让我给你列书单,你还问我哪里有那么多时间看书;你说自己梦想的职业是广告文案,问我如何成为一个文案,应该具备哪些素质;你说你计划晨跑,但总是因为学习、工作辛苦或者身体不舒服第二天起不了床;你说你一直梦想一个人去长途旅行,但是没钱,父母觉得危险。其实,我已经厌倦了你这样说说而已的把戏,我觉得就算我告诉你如何去做,你也不会照做,因为你根本什么都不做。</p><p>真正有行动力的人不需要别人告诉他如何做,因为他已经在做了。就算碰到问题,他也会自己想办法,自己动手去解决或者主动寻求可以帮助他的人,而不是等着别人为自己解决问题。</p><p>首先要学习独立思考。花一点时间想一下自己喜欢什么,梦想是什么,不要别人说想环游世界,你就说你的梦想是环游世界。</p><p>很多人说现实束缚了自己,其实在这个世界上,我们一直都可以有很多选择,生活的决定权也—直都在自己手上,只是我们缺乏行动力而已。</p><p>如果你觉得安于现状是你想要的,那选择安于现状就会让你幸福和满足;如果你不甘平庸,选择一条改变、进取和奋斗的道路,在这个追求的过程中,你也一样会感到快乐。所谓的成功,即是按照自己想要的生活方式生活。最糟糕的状态,莫过于当你想要选择一条不甘平庸、改变、进取和奋斗的道路时,却以一种安于现状的方式生活,最后抱怨自己没有得到想要的人生。</p><p>因为喜欢,你不是在苦苦坚持,也因为喜欢,你愿意投入时间、精力,长久以往,获得成功就是自然而然的事情。</p>'),(92,'2023-02-14 13:19:42','又是一年毕业季','又是一年毕业季,感慨万千,还记的自己刚进学校那时候的情景,我拖着沉重的行李箱站在偌大的教学楼前面,感叹自己未来的日子即将在这个陌生的校园里度过,而如今斗转星移,浮光掠影,弹指之间,那些青葱岁月如同白驹过隙般悄然从指缝溜走。过去的种种在胸口交集纠结,像打翻的五味瓶,甜蜜,酸楚,苦涩,一并涌上心头。','upload/news_picture2.jpg','<p>又是一年毕业季,感慨万千,还记的自己刚进学校那时候的情景,我拖着沉重的行李箱站在偌大的教学楼前面,感叹自己未来的日子即将在这个陌生的校园里度过,而如今斗转星移,浮光掠影,弹指之间,那些青葱岁月如同白驹过隙般悄然从指缝溜走。</p><p>过去的种种在胸口交集纠结,像打翻的五味瓶,甜蜜,酸楚,苦涩,一并涌上心头。一直都是晚会的忠实参与者,无论是台前还是幕后,忽然间,角色转变,那种感觉确实难以用语言表达。</p><p>	过去的三年,总是默默地期盼着这个好雨时节,因为这时候,会有灿烂的阳光,会有满目的百花争艳,会有香甜的冰激凌,这是个毕业的季节,当时不经世事的我们会殷切地期待学校那一大堆的活动,期待穿上绚丽的演出服或者礼仪服,站在大礼堂镁光灯下尽情挥洒我们的澎拜的激情。</p><p>百感交集,隔岸观火与身临其境的感觉竟是如此不同。从来没想过一场晚会送走的是我们自己的时候会是怎样的感情,毕业就真的意味着结束吗?倔强的我们不愿意承认,谢谢学弟学妹们慷慨的将这次的主题定为“我们在这里”。我知道,这可能是他们对我们这些过来人的尊敬和施舍。</p><p>没有为这场晚会排练、奔波,没有为班级、学生会、文学院出点力,还真有点不习惯,百般无奈中,用“工作忙”个万能的借口来搪塞自己,欺骗别人。其实自己心里明白,那只是在逃避,只是不愿面对繁华落幕后的萧条和落寞。大四了,大家各奔东西,想凑齐班上的人真的是难上加难,敏燕从越南回来,刚落地就匆匆回了学校,那么恋家的人也启程回来了,睿睿学姐也是从家赶来跟我们团圆。大家—如既往的寒暄、打趣、调侃对方,似乎一切又回到了当初的单纯美好。</p><p>看着舞台上活泼可爱的学弟学妹们,如同一群机灵的小精灵,清澈的眼神,稚嫩的肢体,轻快地步伐,用他们那热情洋溢的舞姿渲染着在场的每一个人,我知道,我不应该羡慕嫉妒他们,不应该顾自怜惜逝去的青春,不应该感叹夕阳无限好,曾经,我们也拥有过,曾经,我们也年轻过,曾经,我们也灿烂过。我深深地告诉自己,人生的每个阶段都是美的,年轻有年轻的活力,成熟也有成熟的魅力。多—份稳重、淡然、优雅,也是漫漫时光掠影遗留下的.珍贵赏赐。</p>'),(93,'2023-02-14 13:19:42','挫折路上,坚持常在心间','回头看看,你会不会发现,曾经的你在这里摔倒过;回头看看,你是否发现,一次次地重复着,却从没爬起过。而如今,让我们把视线转向前方,那一道道金色的弧线,是流星飞逝的痕迹,或是成功运行的轨道。今天的你,是否要扬帆起航,让幸福来敲门?清晨的太阳撒向大地,神奇的宇宙赋予它神奇的色彩,大自然沐浴着春光,世界因太阳的照射而精彩,林中百鸟啾啾,河水轻轻流淌,汇成清宁的山间小调。','upload/news_picture3.jpg','<p>回头看看,你会不会发现,曾经的你在这里摔倒过;回头看看,你是否发现,一次次地重复着,却从没爬起过。而如今,让我们把视线转向前方,那一道道金色的弧线,是流星飞逝的痕迹,或是成功运行的轨道。今天的你,是否要扬帆起航,让幸福来敲门?</p><p>清晨的太阳撒向大地,神奇的宇宙赋予它神奇的色彩,大自然沐浴着春光,世界因太阳的照射而精彩,林中百鸟啾啾,河水轻轻流淌,汇成清宁的山间小调。</p><p>是的,面对道途上那无情的嘲讽,面对步伐中那重复的摔跤,面对激流与硬石之间猛烈的碰撞,我们必须选择那富于阴雨,却最终见到彩虹的荆棘路。也许,经历了那暴风雨的洗礼,我们便会变得自信,幸福也随之而来。</p><p>司马迁屡遭羞辱,却依然在狱中撰写《史记》,作为一名史学家,不因王权而极度赞赏,也不因卑微而极度批判,然而他在坚持自己操守的同时,却依然要受统治阶级的阻碍,他似乎无权选择自己的本职。但是,他不顾于此,只是在面对道途的阻隔之时,他依然选择了走下去的信念。终于一部开山巨作《史记》诞生,为后人留下一份馈赠,也许在他完成毕生的杰作之时,他微微地笑了,没有什么比梦想实现更快乐的了......</p><p>	或许正如“长风破浪会有时,直挂云帆济沧海”一般,欣欣然地走向看似深渊的崎岖路,而在一番耕耘之后,便会发现这里另有一番天地。也许这就是困难与快乐的交融。</p><p>也许在形形色色的社会中,我们常能看到一份坚持,一份自信,但这里却还有一类人。这类人在暴风雨来临之际,只会闪躲,从未懂得这也是一种历炼,这何尝不是一份快乐。在阴暗的角落里,总是独自在哭,带着伤愁,看不到一点希望。</p><p>我们不能堕落于此,而要像海燕那般,在苍茫的大海上,高傲地飞翔,任何事物都无法阻挡,任何事都是幸福快乐的。</p>'),(94,'2023-02-14 13:19:42','挫折是另一个生命的开端','当遇到挫折或失败,你是看见失败还是看见机会?挫折是我们每个人成长的必经之路,它不是你想有就有,想没有就没有的。有句名言说的好,如果你想一生摆脱苦难,你就得是神或者是死尸。这句话形象地说明了挫折是伴随着人生的,是谁都逃不掉的。','upload/news_picture4.jpg','<p>当遇到挫折或失败,你是看见失败还是看见机会?</p><p>挫折是我们每个人成长的必经之路,它不是你想有就有,想没有就没有的。有句名言说的好,如果你想一生摆脱苦难,你就得是神或者是死尸。这句话形象地说明了挫折是伴随着人生的,是谁都逃不掉的。</p><p>人生在世,从古到今,不分天子平民,机遇虽有不同,但总不免有身陷困境或遭遇难题之处,这时候唯有通权达变,才能使人转危为安,甚至反败为胜。</p><p>大部分的人,一生当中,最痛苦的经验是失去所爱的人,其次是丢掉一份工作。其实,经得起考验的人,就算是被开除也不会惊慌,要学会面对。</p><p>	“塞翁失马,焉知非福。”人生的道路,并不是每一步都迈向成功,这就是追求的意义。我们还要认识到一点,挫折作为一种情绪状态和一种个人体验,各人的耐受性是大不相同的,有的人经历了一次次挫折,就能够坚忍不拔,百折不挠;有的人稍遇挫折便意志消沉,一蹶不振。所以,挫折感是一种主观感受,因为人的目的和需要不同,成功标准不同,所以同一种活动对于不同的人可能会造成不同的挫折感受。</p><p>凡事皆以平常心来看待,对于生命顺逆不要太执著。能够“破我执”是很高层的人生境界。</p><p>人事的艰难就是一种考验。就像—支剑要有磨刀来磨,剑才会利:一块璞玉要有粗石来磨,才会发出耀眼的光芒。我们能够做到的,只是如何减少、避免那些由于自身的原因所造成的挫折,而在遇到痛苦和挫折之后,则力求化解痛苦,争取幸福。我们要知道,痛苦和挫折是双重性的,它既是我们人生中难以完全避免的,也是我们在争取成功时,不可缺少的一种动力。因为我认为,推动我们奋斗的力量,不仅仅是对成功的渴望,还有为摆脱痛苦和挫折而进行的奋斗。</p>'),(95,'2023-02-14 13:19:42','你要去相信,没有到不了的明天','有梦想就去努力,因为在这一辈子里面,现在不去勇敢的努力,也许就再也没有机会了。你要去相信,一定要相信,没有到不了的明天。不要被命运打败,让自己变得更强大。不管你现在是一个人走在异乡的街道上始终没有找到一丝归属感,还是你在跟朋友们一起吃饭开心址笑着的时候闪过一丝落寞。','upload/news_picture5.jpg','<p>有梦想就去努力,因为在这一辈子里面,现在不去勇敢的努力,也许就再也没有机会了。你要去相信,一定要相信,没有到不了的明天。不要被命运打败,让自己变得更强大。</p><p>不管你现在是一个人走在异乡的街道上始终没有找到一丝归属感,还是你在跟朋友们一起吃饭开心址笑着的时候闪过一丝落寞。</p><p>	不管你现在是在图书馆里背着怎么也看不进去的英语单词,还是你现在迷茫地看不清未来的方向不知道要往哪走。</p><p>不管你现在是在努力着去实现梦想却没能拉近与梦想的距离,还是你已经慢慢地找不到自己的梦想了。</p><p>你都要去相信,没有到不了的明天。</p><p>	有的时候你的梦想太大,别人说你的梦想根本不可能实现;有的时候你的梦想又太小,又有人说你胸无大志;有的时候你对死党说着将来要去环游世界的梦想,却换来他的不屑一顾,于是你再也不提自己的梦想;有的时候你突然说起将来要开个小店的愿望,却发现你讲述的那个人,并没有听到你在说什么。</p><p>不过又能怎么样呢,未来始终是自己的,梦想始终是自己的,没有人会来帮你实现它。</p><p>也许很多时候我们只是需要朋友的一句鼓励,一句安慰,却也得不到。但是相信我,世界上还有很多人,只是想要和你说说话。</p><p>因为我们都一样。一样的被人说成固执,一样的在追逐他们眼里根本不在意的东西。</p><p>所以,又有什么关系呢,别人始终不是你、不能懂你的心情,你又何必多去解释呢。这个世界会来阻止你,困难也会接踵而至,其实真正关键的只有自己,有没有那个倔强。</p><p>这个世界上没有不带伤的人,真正能治愈自己的,只有自己。</p>'),(96,'2023-02-14 13:19:42','离开是一种痛苦,是一种勇气,但同样也是一个考验,是一个新的开端','无穷无尽是离愁,天涯海角遍寻思。当离别在即之时,当面对着相濡以沫兄弟般的朋友时,当面对着经历了四年的磨合而形成的真挚友谊之时,我内心激动无语,说一声再见,道一声珍重都很难出口。回想自己四年大学的风风雨雨,回想我们曾经共同经历的岁月流年,我感谢大家的相扶相依,感谢朋友们的莫大支持与帮助。虽然舍不得,但离别的脚步却不因我们的挚情而停滞。','upload/news_picture6.jpg','<p>无穷无尽是离愁,天涯海角遍寻思。当离别在即之时,当面对着相濡以沫兄弟般的朋友时,当面对着经历了四年的磨合而形成的真挚友谊之时,我内心激动无语,说一声再见,道一声珍重都很难出口。回想自己四年大学的风风雨雨,回想我们曾经共同经历的岁月流年,我感谢大家的相扶相依,感谢朋友们的莫大支持与帮助。虽然舍不得,但离别的脚步却不因我们的挚情而停滞。离别的确是一种痛苦,但同样也是我们走入社会,走向新环境、新领域的一个开端,希望大家在以后新的工作岗位上能够确定自己的新起点,坚持不懈,向着更新、更高的目标前进,因为人生最美好的东西永远都在最前方!</p><p>忆往昔峥嵘岁月,看今朝潮起潮落,望未来任重而道远。作为新时代的我们,就应在失败时,能拼搏奋起,去谱写人生的辉煌。在成功时,亦能居安思危,不沉湎于一时的荣耀、鲜花和掌声中,时时刻刻怀着一颗积极寻找自己新的奶酪的心,处变不惊、成败不渝,始终踏着自己坚实的步伐,从零开始,不断向前迈进,这样才能在这风起云涌、变幻莫测的社会大潮中成为真正的弄潮儿!</p>'),(97,'2023-02-14 13:19:42','Leave未必是一种痛苦','无穷无尽是离愁,天涯海角遍寻思。当离别在即之时,当面对着相濡以沫兄弟般的朋友时,当面对着经历了四年的磨合而形成的真挚友谊之时,我内心激动无语,说一声再见,道一声珍重都很难出口。回想自己四年大学的风风雨雨,回想我们曾经共同经历的岁月流年,我感谢大家的相扶相依,感谢朋友们的莫大支持与帮助。虽然舍不得,但离别的脚步却不因我们的挚情而停滞。','upload/news_picture7.jpg','<p>无穷无尽是离愁,天涯海角遍寻思。当离别在即之时,当面对着相濡以沫兄弟般的朋友时,当面对着经历了四年的磨合而形成的真挚友谊之时,我内心激动无语,说一声再见,道一声珍重都很难出口。回想自己四年大学的风风雨雨,回想我们曾经共同经历的岁月流年,我感谢大家的相扶相依,感谢朋友们的莫大支持与帮助。虽然舍不得,但离别的脚步却不因我们的挚情而停滞。离别的确是一种痛苦,但同样也是我们走入社会,走向新环境、新领域的一个开端,希望大家在以后新的工作岗位上能够确定自己的新起点,坚持不懈,向着更新、更高的目标前进,因为人生最美好的东西永远都在最前方!</p><p>忆往昔峥嵘岁月,看今朝潮起潮落,望未来任重而道远。作为新时代的我们,就应在失败时,能拼搏奋起,去谱写人生的辉煌。在成功时,亦能居安思危,不沉湎于一时的荣耀、鲜花和掌声中,时时刻刻怀着一颗积极寻找自己新的奶酪的心,处变不惊、成败不渝,始终踏着自己坚实的步伐,从零开始,不断向前迈进,这样才能在这风起云涌、变幻莫测的社会大潮中成为真正的弄潮儿!</p>'),(98,'2023-02-14 13:19:42','坚持才会成功','回头看看,你会不会发现,曾经的你在这里摔倒过;回头看看,你是否发现,一次次地重复着,却从没爬起过。而如今,让我们把视线转向前方,那一道道金色的弧线,是流星飞逝的痕迹,或是成功运行的轨道。今天的你,是否要扬帆起航,让幸福来敲门?清晨的太阳撒向大地,神奇的宇宙赋予它神奇的色彩,大自然沐浴着春光,世界因太阳的照射而精彩,林中百鸟啾啾,河水轻轻流淌,汇成清宁的山间小调。','upload/news_picture8.jpg','<p>回头看看,你会不会发现,曾经的你在这里摔倒过;回头看看,你是否发现,一次次地重复着,却从没爬起过。而如今,让我们把视线转向前方,那一道道金色的弧线,是流星飞逝的痕迹,或是成功运行的轨道。今天的你,是否要扬帆起航,让幸福来敲门?</p><p>清晨的太阳撒向大地,神奇的宇宙赋予它神奇的色彩,大自然沐浴着春光,世界因太阳的照射而精彩,林中百鸟啾啾,河水轻轻流淌,汇成清宁的山间小调。</p><p>是的,面对道途上那无情的嘲讽,面对步伐中那重复的摔跤,面对激流与硬石之间猛烈的碰撞,我们必须选择那富于阴雨,却最终见到彩虹的荆棘路。也许,经历了那暴风雨的洗礼,我们便会变得自信,幸福也随之而来。</p><p>司马迁屡遭羞辱,却依然在狱中撰写《史记》,作为一名史学家,不因王权而极度赞赏,也不因卑微而极度批判,然而他在坚持自己操守的同时,却依然要受统治阶级的阻碍,他似乎无权选择自己的本职。但是,他不顾于此,只是在面对道途的阻隔之时,他依然选择了走下去的信念。终于一部开山巨作《史记》诞生,为后人留下一份馈赠,也许在他完成毕生的杰作之时,他微微地笑了,没有什么比梦想实现更快乐的了......</p><p>	或许正如“长风破浪会有时,直挂云帆济沧海”一般,欣欣然地走向看似深渊的崎岖路,而在一番耕耘之后,便会发现这里另有一番天地。也许这就是困难与快乐的交融。</p><p>也许在形形色色的社会中,我们常能看到一份坚持,一份自信,但这里却还有一类人。这类人在暴风雨来临之际,只会闪躲,从未懂得这也是一种历炼,这何尝不是一份快乐。在阴暗的角落里,总是独自在哭,带着伤愁,看不到一点希望。</p><p>我们不能堕落于此,而要像海燕那般,在苍茫的大海上,高傲地飞翔,任何事物都无法阻挡,任何事都是幸福快乐的。</p>');
/*!40000 ALTER TABLE `news` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `orders`
--

DROP TABLE IF EXISTS `orders`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `orders` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `orderid` varchar(200) NOT NULL COMMENT '订单编号',
  `tablename` varchar(200) DEFAULT 'shangpinxinxi' COMMENT '商品表名',
  `userid` bigint(20) NOT NULL COMMENT '用户id',
  `goodid` bigint(20) NOT NULL COMMENT '商品id',
  `goodname` varchar(200) DEFAULT NULL COMMENT '商品名称',
  `picture` longtext COMMENT '商品图片',
  `buynumber` int(11) NOT NULL COMMENT '购买数量',
  `price` float NOT NULL DEFAULT '0' COMMENT '价格',
  `discountprice` float DEFAULT '0' COMMENT '折扣价格',
  `total` float NOT NULL DEFAULT '0' COMMENT '总价格',
  `discounttotal` float DEFAULT '0' COMMENT '折扣总价格',
  `type` int(11) DEFAULT '1' COMMENT '支付类型',
  `status` varchar(200) DEFAULT NULL COMMENT '状态',
  `address` varchar(200) DEFAULT NULL COMMENT '地址',
  `tel` varchar(200) DEFAULT NULL COMMENT '电话',
  `consignee` varchar(200) DEFAULT NULL COMMENT '收货人',
  `remark` varchar(200) DEFAULT NULL COMMENT '备注',
  `logistics` longtext COMMENT '物流',
  `goodtype` varchar(200) DEFAULT NULL COMMENT '商品类型',
  PRIMARY KEY (`id`),
  UNIQUE KEY `orderid` (`orderid`)
) ENGINE=InnoDB AUTO_INCREMENT=1676381185601 DEFAULT CHARSET=utf8 COMMENT='订单';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `orders`
--

LOCK TABLES `orders` WRITE;
/*!40000 ALTER TABLE `orders` DISABLE KEYS */;
INSERT INTO `orders` VALUES (1676380939279,'2023-02-14 13:22:19','202321421177899','shangpinxinxi',1676380903839,32,'商品名称2','upload/shangpinxinxi_fengmian2.jpg',1,99.9,99.9,99.9,99.9,1,'已完成','阳光大厦V101','13525252525','11','',NULL,'商品分类2'),(1676381159272,'2023-02-14 13:25:58','2023214212047441','shangpinxinxi',1676380903839,37,'足球','upload/shangpinxinxi_fengmian7.jpg',1,88,88,88,88,1,'已退款','阳光大厦V101','13525252525','11','',NULL,'足球'),(1676381185600,'2023-02-14 13:26:25','2023214212114288','shangpinxinxi',1676380903839,37,'足球','upload/shangpinxinxi_fengmian7.jpg',5,88,88,440,440,1,'已发货','阳光大厦V101','13525252525','11','',NULL,'足球');
/*!40000 ALTER TABLE `orders` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `shangpinfenlei`
--

DROP TABLE IF EXISTS `shangpinfenlei`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `shangpinfenlei` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `shangpinfenlei` varchar(200) DEFAULT NULL COMMENT '商品分类',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8 COMMENT='商品分类';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `shangpinfenlei`
--

LOCK TABLES `shangpinfenlei` WRITE;
/*!40000 ALTER TABLE `shangpinfenlei` DISABLE KEYS */;
INSERT INTO `shangpinfenlei` VALUES (21,'2023-02-14 13:19:42','商品分类1'),(22,'2023-02-14 13:19:42','商品分类2'),(23,'2023-02-14 13:19:42','商品分类3'),(24,'2023-02-14 13:19:42','商品分类4'),(25,'2023-02-14 13:19:42','商品分类5'),(26,'2023-02-14 13:19:42','商品分类6'),(27,'2023-02-14 13:19:42','商品分类7'),(28,'2023-02-14 13:19:42','足球');
/*!40000 ALTER TABLE `shangpinfenlei` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `shangpinxinxi`
--

DROP TABLE IF EXISTS `shangpinxinxi`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `shangpinxinxi` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `shangpinbianhao` varchar(200) DEFAULT NULL COMMENT '商品编号',
  `shangpinmingcheng` varchar(200) DEFAULT NULL COMMENT '商品名称',
  `shangpinfenlei` varchar(200) DEFAULT NULL COMMENT '商品分类',
  `fengmian` longtext COMMENT '封面',
  `guige` varchar(200) DEFAULT NULL COMMENT '规格',
  `onelimittimes` int(11) DEFAULT NULL COMMENT '单限',
  `alllimittimes` int(11) DEFAULT NULL COMMENT '库存',
  `clicktime` datetime DEFAULT NULL COMMENT '最近点击时间',
  `price` float NOT NULL COMMENT '价格',
  PRIMARY KEY (`id`),
  UNIQUE KEY `shangpinbianhao` (`shangpinbianhao`)
) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8 COMMENT='商品信息';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `shangpinxinxi`
--

LOCK TABLES `shangpinxinxi` WRITE;
/*!40000 ALTER TABLE `shangpinxinxi` DISABLE KEYS */;
INSERT INTO `shangpinxinxi` VALUES (31,'2023-02-14 13:19:42','1111111111','商品名称1','商品分类1','upload/shangpinxinxi_fengmian1.jpg,upload/shangpinxinxi_fengmian2.jpg,upload/shangpinxinxi_fengmian3.jpg','规格1',1,99,'2023-02-14 21:19:42',99.9),(32,'2023-02-14 13:19:42','2222222222','商品名称2','商品分类2','upload/shangpinxinxi_fengmian2.jpg,upload/shangpinxinxi_fengmian3.jpg,upload/shangpinxinxi_fengmian4.jpg','规格2',2,98,'2023-02-14 21:26:43',99.9),(33,'2023-02-14 13:19:42','3333333333','商品名称3','商品分类3','upload/shangpinxinxi_fengmian3.jpg,upload/shangpinxinxi_fengmian4.jpg,upload/shangpinxinxi_fengmian5.jpg','规格3',3,99,'2023-02-14 21:19:42',99.9),(34,'2023-02-14 13:19:42','4444444444','商品名称4','商品分类4','upload/shangpinxinxi_fengmian4.jpg,upload/shangpinxinxi_fengmian5.jpg,upload/shangpinxinxi_fengmian6.jpg','规格4',4,99,'2023-02-14 21:19:42',99.9),(35,'2023-02-14 13:19:42','5555555555','商品名称5','商品分类5','upload/shangpinxinxi_fengmian5.jpg,upload/shangpinxinxi_fengmian6.jpg,upload/shangpinxinxi_fengmian7.jpg','规格5',5,99,'2023-02-14 21:19:42',99.9),(36,'2023-02-14 13:19:42','6666666666','商品名称6','商品分类6','upload/shangpinxinxi_fengmian6.jpg,upload/shangpinxinxi_fengmian7.jpg,upload/shangpinxinxi_fengmian8.jpg','规格6',6,99,'2023-02-14 21:19:42',99.9),(37,'2023-02-14 13:19:42','7777777777','足球','足球','upload/shangpinxinxi_fengmian7.jpg','50*30',5,44,'2023-02-14 21:26:31',88),(38,'2023-02-14 13:19:42','8888888888','商品名称8','商品分类8','upload/shangpinxinxi_fengmian8.jpg,upload/shangpinxinxi_fengmian9.jpg,upload/shangpinxinxi_fengmian10.jpg','规格8',8,99,'2023-02-14 21:19:42',99.9);
/*!40000 ALTER TABLE `shangpinxinxi` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `storeup`
--

DROP TABLE IF EXISTS `storeup`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `storeup` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `userid` bigint(20) NOT NULL COMMENT '用户id',
  `refid` bigint(20) DEFAULT NULL COMMENT '商品id',
  `tablename` varchar(200) DEFAULT NULL COMMENT '表名',
  `name` varchar(200) NOT NULL COMMENT '名称',
  `picture` longtext NOT NULL COMMENT '图片',
  `type` varchar(200) DEFAULT '1' COMMENT '类型(1:收藏,21:赞,22:踩,31:竞拍参与,41:关注)',
  `inteltype` varchar(200) DEFAULT NULL COMMENT '推荐类型',
  `remark` varchar(200) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1676381155056 DEFAULT CHARSET=utf8 COMMENT='收藏表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `systemintro`
--

DROP TABLE IF EXISTS `systemintro`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `systemintro` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `title` varchar(200) NOT NULL COMMENT '标题',
  `subtitle` varchar(200) DEFAULT NULL COMMENT '副标题',
  `content` longtext NOT NULL COMMENT '内容',
  `picture1` longtext COMMENT '图片1',
  `picture2` longtext COMMENT '图片2',
  `picture3` longtext COMMENT '图片3',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='关于我们';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `systemintro`
--

LOCK TABLES `systemintro` WRITE;
/*!40000 ALTER TABLE `systemintro` DISABLE KEYS */;
INSERT INTO `systemintro` VALUES (1,'2023-02-14 13:19:42','系统简介','SYSTEM INTRODUCTION','<p>当遇到挫折或失败,你是看见失败还是看见机会?挫折是我们每个人成长的必经之路,它不是你想有就有,想没有就没有的。有句名言说的好,如果你想一生摆脱苦难,你就得是神或者是死尸。这句话形象地说明了挫折是伴随着人生的,是谁都逃不掉的。人生在世,从古到今,不分天子平民,机遇虽有不同,但总不免有身陷困境或遭遇难题之处,这时候唯有通权达变,才能使人转危为安,甚至反败为胜。大部分的人,一生当中,最痛苦的经验是失去所爱的人,其次是丢掉一份工作。其实,经得起考验的人,就算是被开除也不会惊慌,要学会面对。</p>','upload/systemintro_picture1.jpg','upload/systemintro_picture2.jpg','upload/systemintro_picture3.jpg');
/*!40000 ALTER TABLE `systemintro` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `token`
--

DROP TABLE IF EXISTS `token`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
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表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `token`
--

LOCK TABLES `token` WRITE;
/*!40000 ALTER TABLE `token` DISABLE KEYS */;
INSERT INTO `token` VALUES (1,1676380903839,'11','yonghu','用户','kalurr2724afqrjvuh7m3hlhmcybs3kd','2023-02-14 13:21:48','2023-02-14 14:25:49'),(2,1,'admin','users','管理员','7qkpqktsv5950mhl6tsvybh1vz5pcpky','2023-02-14 13:23:46','2023-02-14 14:27:16');
/*!40000 ALTER TABLE `token` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `users`
--

DROP TABLE IF EXISTS `users`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
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='用户表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `users`
--

LOCK TABLES `users` WRITE;
/*!40000 ALTER TABLE `users` DISABLE KEYS */;
INSERT INTO `users` VALUES (1,'admin','admin','管理员','2023-02-14 13:19:42');
/*!40000 ALTER TABLE `users` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `yonghu`
--

DROP TABLE IF EXISTS `yonghu`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `yonghu` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `yonghuzhanghao` varchar(200) NOT NULL COMMENT '用户账号',
  `mima` varchar(200) NOT NULL COMMENT '密码',
  `yonghuxingming` varchar(200) NOT NULL COMMENT '用户姓名',
  `touxiang` longtext COMMENT '头像',
  `xingbie` varchar(200) DEFAULT NULL COMMENT '性别',
  `nianling` int(11) DEFAULT NULL COMMENT '年龄',
  `shouji` varchar(200) DEFAULT NULL COMMENT '手机',
  `money` float DEFAULT '0' COMMENT '余额',
  PRIMARY KEY (`id`),
  UNIQUE KEY `yonghuzhanghao` (`yonghuzhanghao`)
) ENGINE=InnoDB AUTO_INCREMENT=1676380903840 DEFAULT CHARSET=utf8 COMMENT='用户';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `yonghu`
--

LOCK TABLES `yonghu` WRITE;
/*!40000 ALTER TABLE `yonghu` DISABLE KEYS */;
INSERT INTO `yonghu` VALUES (11,'2023-02-14 13:19:42','用户账号1','123456','用户姓名1','upload/yonghu_touxiang1.jpg','男',1,'13823888881',200),(12,'2023-02-14 13:19:42','用户账号2','123456','用户姓名2','upload/yonghu_touxiang2.jpg','男',2,'13823888882',200),(13,'2023-02-14 13:19:42','用户账号3','123456','用户姓名3','upload/yonghu_touxiang3.jpg','男',3,'13823888883',200),(14,'2023-02-14 13:19:42','用户账号4','123456','用户姓名4','upload/yonghu_touxiang4.jpg','男',4,'13823888884',200),(15,'2023-02-14 13:19:42','用户账号5','123456','用户姓名5','upload/yonghu_touxiang5.jpg','男',5,'13823888885',200),(16,'2023-02-14 13:19:42','用户账号6','123456','用户姓名6','upload/yonghu_touxiang6.jpg','男',6,'13823888886',200),(17,'2023-02-14 13:19:42','用户账号7','123456','用户姓名7','upload/yonghu_touxiang7.jpg','男',7,'13823888887',200),(1676380903839,'2023-02-14 13:21:43','11','11','王子','upload/1676380898292.png','男',25,'13525252525',1460.1);
/*!40000 ALTER TABLE `yonghu` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

5、关键代码

5.1商品信息管理Controller模块 

package com.controller;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;

import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;
import com.entity.OrdersEntity;
import com.service.OrdersService;

import com.entity.ShangpinxinxiEntity;
import com.entity.view.ShangpinxinxiView;

import com.service.ShangpinxinxiService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
import java.io.IOException;
import com.service.StoreupService;
import com.entity.StoreupEntity;

/**
 * 商品信息
 * 后端接口
 * @author 
 * @email 
 * @date 
 */
@RestController
@RequestMapping("/shangpinxinxi")
public class ShangpinxinxiController {
    @Autowired
    private ShangpinxinxiService shangpinxinxiService;

    @Autowired
    private StoreupService storeupService;

    @Autowired
    private OrdersService ordersService;
    
    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,ShangpinxinxiEntity shangpinxinxi,
                @RequestParam(required = false) Double pricestart,
                @RequestParam(required = false) Double priceend,
		HttpServletRequest request){
        EntityWrapper<ShangpinxinxiEntity> ew = new EntityWrapper<ShangpinxinxiEntity>();
                if(pricestart!=null) ew.ge("price", pricestart);
                if(priceend!=null) ew.le("price", priceend);

		PageUtils page = shangpinxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shangpinxinxi), params), params));

        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
	@IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,ShangpinxinxiEntity shangpinxinxi, 
                @RequestParam(required = false) Double pricestart,
                @RequestParam(required = false) Double priceend,
		HttpServletRequest request){
        EntityWrapper<ShangpinxinxiEntity> ew = new EntityWrapper<ShangpinxinxiEntity>();
                if(pricestart!=null) ew.ge("price", pricestart);
                if(priceend!=null) ew.le("price", priceend);

		PageUtils page = shangpinxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shangpinxinxi), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( ShangpinxinxiEntity shangpinxinxi){
       	EntityWrapper<ShangpinxinxiEntity> ew = new EntityWrapper<ShangpinxinxiEntity>();
      	ew.allEq(MPUtil.allEQMapPre( shangpinxinxi, "shangpinxinxi")); 
        return R.ok().put("data", shangpinxinxiService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(ShangpinxinxiEntity shangpinxinxi){
        EntityWrapper< ShangpinxinxiEntity> ew = new EntityWrapper< ShangpinxinxiEntity>();
 		ew.allEq(MPUtil.allEQMapPre( shangpinxinxi, "shangpinxinxi")); 
		ShangpinxinxiView shangpinxinxiView =  shangpinxinxiService.selectView(ew);
		return R.ok("查询商品信息成功").put("data", shangpinxinxiView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        ShangpinxinxiEntity shangpinxinxi = shangpinxinxiService.selectById(id);
		shangpinxinxi.setClicktime(new Date());
		shangpinxinxiService.updateById(shangpinxinxi);
        return R.ok().put("data", shangpinxinxi);
    }

    /**
     * 前端详情
     */
	@IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        ShangpinxinxiEntity shangpinxinxi = shangpinxinxiService.selectById(id);
		shangpinxinxi.setClicktime(new Date());
		shangpinxinxiService.updateById(shangpinxinxi);
        return R.ok().put("data", shangpinxinxi);
    }
    
    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody ShangpinxinxiEntity shangpinxinxi, HttpServletRequest request){
    	shangpinxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(shangpinxinxi);
        shangpinxinxiService.insert(shangpinxinxi);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
	@IgnoreAuth
    @RequestMapping("/add")
    public R add(@RequestBody ShangpinxinxiEntity shangpinxinxi, HttpServletRequest request){
    	shangpinxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(shangpinxinxi);
        shangpinxinxiService.insert(shangpinxinxi);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    @Transactional
    public R update(@RequestBody ShangpinxinxiEntity shangpinxinxi, HttpServletRequest request){
        //ValidatorUtils.validateEntity(shangpinxinxi);
        shangpinxinxiService.updateById(shangpinxinxi);//全部更新
        return R.ok();
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        shangpinxinxiService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
    
    /**
     * 提醒接口
     */
	@RequestMapping("/remind/{columnName}/{type}")
	public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("column", columnName);
		map.put("type", type);
		
		if(type.equals("2")) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Calendar c = Calendar.getInstance();
			Date remindStartDate = null;
			Date remindEndDate = null;
			if(map.get("remindstart")!=null) {
				Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
				c.setTime(new Date()); 
				c.add(Calendar.DAY_OF_MONTH,remindStart);
				remindStartDate = c.getTime();
				map.put("remindstart", sdf.format(remindStartDate));
			}
			if(map.get("remindend")!=null) {
				Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
				c.setTime(new Date());
				c.add(Calendar.DAY_OF_MONTH,remindEnd);
				remindEndDate = c.getTime();
				map.put("remindend", sdf.format(remindEndDate));
			}
		}
		
		Wrapper<ShangpinxinxiEntity> wrapper = new EntityWrapper<ShangpinxinxiEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}


		int count = shangpinxinxiService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	
	/**
     * 前端智能排序
     */
	@IgnoreAuth
    @RequestMapping("/autoSort")
    public R autoSort(@RequestParam Map<String, Object> params,ShangpinxinxiEntity shangpinxinxi, HttpServletRequest request,String pre){
        EntityWrapper<ShangpinxinxiEntity> ew = new EntityWrapper<ShangpinxinxiEntity>();
        Map<String, Object> newMap = new HashMap<String, Object>();
        Map<String, Object> param = new HashMap<String, Object>();
		Iterator<Map.Entry<String, Object>> it = param.entrySet().iterator();
		while (it.hasNext()) {
			Map.Entry<String, Object> entry = it.next();
			String key = entry.getKey();
			String newKey = entry.getKey();
			if (pre.endsWith(".")) {
				newMap.put(pre + newKey, entry.getValue());
			} else if (StringUtils.isEmpty(pre)) {
				newMap.put(newKey, entry.getValue());
			} else {
				newMap.put(pre + "." + newKey, entry.getValue());
			}
		}
		params.put("sort", "clicktime");
        params.put("order", "desc");
		PageUtils page = shangpinxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shangpinxinxi), params), params));
        return R.ok().put("data", page);
    }

        /**
     * 协同算法(按用户购买推荐)
     */
    @RequestMapping("/autoSort2")
    public R autoSort2(@RequestParam Map<String, Object> params,ShangpinxinxiEntity shangpinxinxi, HttpServletRequest request){
        String userId = request.getSession().getAttribute("userId").toString();
        String goodtypeColumn = "shangpinfenlei";
        List<OrdersEntity> orders = ordersService.selectList(new EntityWrapper<OrdersEntity>().eq("userid", userId).eq("tablename", "shangpinxinxi").orderBy("addtime", false));
        List<String> goodtypes = new ArrayList<String>();
        Integer limit = params.get("limit")==null?10:Integer.parseInt(params.get("limit").toString());
        List<ShangpinxinxiEntity> shangpinxinxiList = new ArrayList<ShangpinxinxiEntity>();
	//去重
    	List<OrdersEntity> ordersDist = new ArrayList<OrdersEntity>();
    	for(OrdersEntity o1 : orders) {
    		boolean addFlag = true;
    		for(OrdersEntity o2 : ordersDist) {
    			if(o1.getGoodid()==o2.getGoodid() || o1.getGoodtype().equals(o2.getGoodtype())) {
    				addFlag = false;
    				break;
    			}
    		}
    		if(addFlag) ordersDist.add(o1);
    	}
        if(ordersDist!=null && ordersDist.size()>0) {
                for(OrdersEntity o : ordersDist) {
                        shangpinxinxiList.addAll(shangpinxinxiService.selectList(new EntityWrapper<ShangpinxinxiEntity>().eq(goodtypeColumn, o.getGoodtype())));
                }
        }
        EntityWrapper<ShangpinxinxiEntity> ew = new EntityWrapper<ShangpinxinxiEntity>();
        params.put("sort", "id");
        params.put("order", "desc");
        PageUtils page = shangpinxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shangpinxinxi), params), params));
        List<ShangpinxinxiEntity> pageList = (List<ShangpinxinxiEntity>)page.getList();
        if(shangpinxinxiList.size()<limit) {
                int toAddNum = (limit-shangpinxinxiList.size())<=pageList.size()?(limit-shangpinxinxiList.size()):pageList.size();
                for(ShangpinxinxiEntity o1 : pageList) {
                    boolean addFlag = true;
                    for(ShangpinxinxiEntity o2 : shangpinxinxiList) {
                        if(o1.getId().intValue()==o2.getId().intValue()) {
                            addFlag = false;
                            break;
                        }
                    }
                    if(addFlag) {
                        shangpinxinxiList.add(o1);
                        if(--toAddNum==0) break;
                    }   
                }
        } else if(shangpinxinxiList.size()>limit) {
            shangpinxinxiList = shangpinxinxiList.subList(0, limit);
        }
        page.setList(shangpinxinxiList);
        return R.ok().put("data", page);
    }
}

5.2商品信息管理Service模块 

package com.service;

import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.service.IService;
import com.utils.PageUtils;
import com.entity.ShangpinxinxiEntity;
import java.util.List;
import java.util.Map;
import com.entity.vo.ShangpinxinxiVO;
import org.apache.ibatis.annotations.Param;
import com.entity.view.ShangpinxinxiView;


/**
 * 商品信息
 *
 * @author 
 * @email 
 * @date 
 */
public interface ShangpinxinxiService extends IService<ShangpinxinxiEntity> {

    PageUtils queryPage(Map<String, Object> params);
    
   	List<ShangpinxinxiVO> selectListVO(Wrapper<ShangpinxinxiEntity> wrapper);
   	
   	ShangpinxinxiVO selectVO(@Param("ew") Wrapper<ShangpinxinxiEntity> wrapper);
   	
   	List<ShangpinxinxiView> selectListView(Wrapper<ShangpinxinxiEntity> wrapper);
   	
   	ShangpinxinxiView selectView(@Param("ew") Wrapper<ShangpinxinxiEntity> wrapper);
   	
   	PageUtils queryPage(Map<String, Object> params,Wrapper<ShangpinxinxiEntity> wrapper);  	

}

5.3商品信息管理ServiceImpl模块

package com.service.impl;

import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.List;

import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.utils.PageUtils;
import com.utils.Query;

import com.dao.ShangpinxinxiDao;
import com.entity.ShangpinxinxiEntity;
import com.service.ShangpinxinxiService;
import com.entity.vo.ShangpinxinxiVO;
import com.entity.view.ShangpinxinxiView;

@Service("shangpinxinxiService")
public class ShangpinxinxiServiceImpl extends ServiceImpl<ShangpinxinxiDao, ShangpinxinxiEntity> implements ShangpinxinxiService {
	
	
    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        Page<ShangpinxinxiEntity> page = this.selectPage(
                new Query<ShangpinxinxiEntity>(params).getPage(),
                new EntityWrapper<ShangpinxinxiEntity>()
        );
        return new PageUtils(page);
    }
    
    @Override
	public PageUtils queryPage(Map<String, Object> params, Wrapper<ShangpinxinxiEntity> wrapper) {
		  Page<ShangpinxinxiView> page =new Query<ShangpinxinxiView>(params).getPage();
	        page.setRecords(baseMapper.selectListView(page,wrapper));
	    	PageUtils pageUtil = new PageUtils(page);
	    	return pageUtil;
 	}
    
    @Override
	public List<ShangpinxinxiVO> selectListVO(Wrapper<ShangpinxinxiEntity> wrapper) {
 		return baseMapper.selectListVO(wrapper);
	}
	
	@Override
	public ShangpinxinxiVO selectVO(Wrapper<ShangpinxinxiEntity> wrapper) {
 		return baseMapper.selectVO(wrapper);
	}
	
	@Override
	public List<ShangpinxinxiView> selectListView(Wrapper<ShangpinxinxiEntity> wrapper) {
		return baseMapper.selectListView(wrapper);
	}

	@Override
	public ShangpinxinxiView selectView(Wrapper<ShangpinxinxiEntity> wrapper) {
		return baseMapper.selectView(wrapper);
	}

}

5.4商品信息管理Dao模块

package com.dao;

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

import org.apache.ibatis.annotations.Param;
import com.entity.vo.ShangpinxinxiVO;
import com.entity.view.ShangpinxinxiView;

/**
 * 商品信息
 * 
 * @author 
 * @email 
 * @date 
 */
public interface ShangpinxinxiDao extends BaseMapper<ShangpinxinxiEntity> {
	
	List<ShangpinxinxiVO> selectListVO(@Param("ew") Wrapper<ShangpinxinxiEntity> wrapper);
	
	ShangpinxinxiVO selectVO(@Param("ew") Wrapper<ShangpinxinxiEntity> wrapper);
	
	List<ShangpinxinxiView> selectListView(@Param("ew") Wrapper<ShangpinxinxiEntity> wrapper);

	List<ShangpinxinxiView> selectListView(Pagination page,@Param("ew") Wrapper<ShangpinxinxiEntity> wrapper);
	
	ShangpinxinxiView selectView(@Param("ew") Wrapper<ShangpinxinxiEntity> wrapper);

}

6、论文目录结构

7、源码获取

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

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

获取源码请私信

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值