计算机毕业设计 基于HTML5+CSS3的在线英语阅读分级平台的设计与实现 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 项目介绍

随着电脑和笔记本的广泛运用,以及各种计算机硬件的完善和升级,市面上的电脑和笔记本的性能都得到提升,可以支持的软件也逐渐增多,因此,在计算机上安装软件来发挥其高效地信息处理的作用,则很受人们的青睐。传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装在线英语阅读分级平台软件来发挥其高效地信息处理的作用,可以规范信息管理流程,让管理工作可以系统化和程序化,同时,在线英语阅读分级平台的有效运用可以帮助管理人员准确快速地处理信息。在线英语阅读分级平台在对开发工具的选择上也很慎重,为了便于开发实现,选择的开发工具为Eclipse,选择的数据库工具为Mysql。以此搭建开发环境实现在线英语阅读分级平台的功能。在线英语阅读分级平台是一款运用软件开发技术设计实现的应用系统,在信息处理上可以达到快速的目的,不管是针对数据添加,数据维护和统计,以及数据查询等处理要求,在线英语阅读分级平台都可以轻松应对。

1.2 开发技术

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

2、系统功能设计结构图

3、功能截图

3.1 前台功能

登录

首页

 公告

 书籍

个人中心

3.2 后台功能

登录

用户信息管理:是对用户信息的查询管理,可以删除用户信息、修改用户信息、新增用户信息,还能进行对用户名称的模糊查询的条件。

书籍信息管理: 查看已发布的书籍信息数据,修改书籍信息,书籍信息作废,即可删除,还进行了对书籍信息名称的模糊查询、书籍信息的类型查询等一些条件。

章节信息管理: 根据章节信息进行条件查询,还可以对章节信息进行新增、修改、查询操作等等。

公告信息管理: 管理员根据公告信息进行新增、修改、查询操作等等。

4、数据库表结构设计

/*
SQLyog Ultimate v11.3 (64 bit)
MySQL - 5.7.32-log : Database - zaixianyingyuyuedupingtai
*********************************************************************
*/

/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`zaixianyingyuyuedupingtai` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `zaixianyingyuyuedupingtai`;

/*Table structure for table `config` */

DROP TABLE IF EXISTS `config`;

CREATE TABLE `config` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(100) DEFAULT 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=15 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-04-22 11:23:42'),(2,'sex_types','性别类型',2,'女',NULL,NULL,'2023-04-22 11:23:42'),(3,'shangxia_types','上下架',1,'上架',NULL,NULL,'2023-04-22 11:23:42'),(4,'shangxia_types','上下架',2,'下架',NULL,NULL,'2023-04-22 11:23:42'),(5,'shuji_types','书籍类型',1,'书籍类型1',NULL,NULL,'2023-04-22 11:23:42'),(6,'shuji_types','书籍类型',2,'书籍类型2',NULL,NULL,'2023-04-22 11:23:42'),(7,'shuji_erji_types','二级类型',1,'书籍类型1.1',1,NULL,'2023-04-22 11:23:42'),(8,'shuji_erji_types','二级类型',2,'二级类型1.2',1,NULL,'2023-04-22 11:23:42'),(9,'shuji_erji_types','二级类型',3,'书籍类型2.1',2,NULL,'2023-04-22 11:23:42'),(10,'shuji_erji_types','二级类型',4,'书籍类型2.2',2,NULL,'2023-04-22 11:23:42'),(11,'shuji_collection_types','收藏表类型',1,'收藏',NULL,NULL,'2023-04-22 11:23:42'),(12,'zhangjie_collection_types','收藏表类型',1,'收藏',NULL,NULL,'2023-04-22 11:23:42'),(13,'gonggao_types','公告类型',1,'公告类型1',NULL,NULL,'2023-04-22 11:23:42'),(14,'gonggao_types','公告类型',2,'公告类型2',NULL,NULL,'2023-04-22 11:23:42');

/*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-04-22 11:23:56','公告详情1','2023-04-22 11:23:56'),(2,'公告名称2','upload/gonggao2.jpg',1,'2023-04-22 11:23:56','公告详情2','2023-04-22 11:23:56'),(3,'公告名称3','upload/gonggao3.jpg',1,'2023-04-22 11:23:56','公告详情3','2023-04-22 11:23:56'),(4,'公告名称4','upload/gonggao4.jpg',1,'2023-04-22 11:23:56','公告详情4','2023-04-22 11:23:56'),(5,'公告名称5','upload/gonggao5.jpg',1,'2023-04-22 11:23:56','公告详情5','2023-04-22 11:23:56'),(6,'公告名称6','upload/gonggao6.jpg',2,'2023-04-22 11:23:56','公告详情6','2023-04-22 11:23:56'),(7,'公告名称7','upload/gonggao7.jpg',1,'2023-04-22 11:23:56','公告详情7','2023-04-22 11:23:56'),(8,'公告名称8','upload/gonggao8.jpg',2,'2023-04-22 11:23:56','公告详情8','2023-04-22 11:23:56'),(9,'公告名称9','upload/gonggao9.jpg',2,'2023-04-22 11:23:56','公告详情9','2023-04-22 11:23:56'),(10,'公告名称10','upload/gonggao10.jpg',2,'2023-04-22 11:23:56','公告详情10','2023-04-22 11:23:56'),(11,'公告名称11','upload/gonggao11.jpg',2,'2023-04-22 11:23:56','公告详情11','2023-04-22 11:23:56'),(12,'公告名称12','upload/gonggao12.jpg',1,'2023-04-22 11:23:56','公告详情12','2023-04-22 11:23:56'),(13,'公告名称13','upload/gonggao13.jpg',2,'2023-04-22 11:23:56','公告详情13','2023-04-22 11:23:56'),(14,'公告名称14','upload/gonggao14.jpg',2,'2023-04-22 11:23:56','公告详情14','2023-04-22 11:23:56');

/*Table structure for table `shuji` */

DROP TABLE IF EXISTS `shuji`;

CREATE TABLE `shuji` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键 ',
  `shuji_name` varchar(200) DEFAULT NULL COMMENT '书籍名称  Search111 ',
  `shuji_uuid_number` varchar(200) DEFAULT NULL COMMENT '书籍编号',
  `shuji_photo` varchar(200) DEFAULT NULL COMMENT '书籍封面',
  `shuji_types` int(11) DEFAULT NULL COMMENT '书籍类型 Search111',
  `shuji_erji_types` int(11) DEFAULT NULL COMMENT '二级类型 Search111',
  `shuji_clicknum` int(11) DEFAULT NULL COMMENT '书籍热度',
  `shuji_content` text COMMENT '书籍简介 ',
  `shangxia_types` int(11) DEFAULT NULL COMMENT '是否上架 ',
  `shuji_delete` int(11) DEFAULT NULL 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 `shuji` */

insert  into `shuji`(`id`,`shuji_name`,`shuji_uuid_number`,`shuji_photo`,`shuji_types`,`shuji_erji_types`,`shuji_clicknum`,`shuji_content`,`shangxia_types`,`shuji_delete`,`insert_time`,`create_time`) values (1,'书籍名称1','1682133836967','upload/shuji1.jpg',2,2,344,'书籍简介1',1,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(2,'书籍名称2','1682133837001','upload/shuji2.jpg',2,2,486,'书籍简介2',1,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(3,'书籍名称3','1682133837045','upload/shuji3.jpg',1,3,178,'书籍简介3',1,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(4,'书籍名称4','1682133837034','upload/shuji4.jpg',1,1,125,'书籍简介4',1,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(5,'书籍名称5','1682133837049','upload/shuji5.jpg',1,4,40,'书籍简介5',1,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(6,'书籍名称6','1682133836964','upload/shuji6.jpg',1,1,422,'书籍简介6',1,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(7,'书籍名称7','1682133836987','upload/shuji7.jpg',2,3,109,'书籍简介7',1,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(8,'书籍名称8','1682133837001','upload/shuji8.jpg',2,3,197,'书籍简介8',1,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(9,'书籍名称9','1682133837003','upload/shuji9.jpg',1,2,348,'书籍简介9',1,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(10,'书籍名称10','1682133837018','upload/shuji10.jpg',2,3,150,'书籍简介10',1,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(11,'书籍名称11','1682133837013','upload/shuji11.jpg',2,4,53,'书籍简介11',1,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(12,'书籍名称12','1682133836980','upload/shuji12.jpg',1,2,87,'书籍简介12',1,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(13,'书籍名称13','1682133837031','upload/shuji13.jpg',2,3,259,'书籍简介13',1,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(14,'书籍名称14','1682133837010','upload/shuji14.jpg',1,4,340,'书籍简介14',2,1,'2023-04-22 11:23:56','2023-04-22 11:23:56');

/*Table structure for table `shuji_collection` */

DROP TABLE IF EXISTS `shuji_collection`;

CREATE TABLE `shuji_collection` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `shuji_id` int(11) DEFAULT NULL COMMENT '书籍',
  `yonghu_id` int(11) DEFAULT NULL COMMENT '用户',
  `shuji_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=15 DEFAULT CHARSET=utf8 COMMENT='我的书架';

/*Data for the table `shuji_collection` */

insert  into `shuji_collection`(`id`,`shuji_id`,`yonghu_id`,`shuji_collection_types`,`insert_time`,`create_time`) values (1,1,3,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(2,2,1,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(3,3,2,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(4,4,3,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(5,5,1,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(6,6,3,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(7,7,2,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(8,8,2,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(10,10,2,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(11,11,2,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(12,12,2,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(13,13,1,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(14,14,3,1,'2023-04-22 11:23:56','2023-04-22 11:23:56');

/*Table structure for table `shuji_liuyan` */

DROP TABLE IF EXISTS `shuji_liuyan`;

CREATE TABLE `shuji_liuyan` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `shuji_id` int(11) DEFAULT NULL COMMENT '书籍',
  `yonghu_id` int(11) DEFAULT NULL COMMENT '用户',
  `shuji_liuyan_text` text COMMENT '评论内容',
  `insert_time` timestamp NULL DEFAULT NULL COMMENT '评论时间',
  `reply_text` text COMMENT '回复内容',
  `update_time` timestamp NULL DEFAULT NULL COMMENT '回复时间',
  `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='书籍评论';

/*Data for the table `shuji_liuyan` */

insert  into `shuji_liuyan`(`id`,`shuji_id`,`yonghu_id`,`shuji_liuyan_text`,`insert_time`,`reply_text`,`update_time`,`create_time`) values (1,1,2,'评论内容1','2023-04-22 11:23:56','回复信息1','2023-04-22 11:23:56','2023-04-22 11:23:56'),(2,2,3,'评论内容2','2023-04-22 11:23:56','回复信息2','2023-04-22 11:23:56','2023-04-22 11:23:56'),(3,3,3,'评论内容3','2023-04-22 11:23:56','回复信息3','2023-04-22 11:23:56','2023-04-22 11:23:56'),(4,4,1,'评论内容4','2023-04-22 11:23:56','回复信息4','2023-04-22 11:23:56','2023-04-22 11:23:56'),(5,5,1,'评论内容5','2023-04-22 11:23:56','回复信息5','2023-04-22 11:23:56','2023-04-22 11:23:56'),(6,6,3,'评论内容6','2023-04-22 11:23:56','回复信息6','2023-04-22 11:23:56','2023-04-22 11:23:56'),(7,7,1,'评论内容7','2023-04-22 11:23:56','回复信息7','2023-04-22 11:23:56','2023-04-22 11:23:56'),(8,8,1,'评论内容8','2023-04-22 11:23:56','回复信息8','2023-04-22 11:23:56','2023-04-22 11:23:56'),(9,9,2,'评论内容9','2023-04-22 11:23:56','回复信息9','2023-04-22 11:23:56','2023-04-22 11:23:56'),(10,10,2,'评论内容10','2023-04-22 11:23:56','回复信息10','2023-04-22 11:23:56','2023-04-22 11:23:56'),(11,11,2,'评论内容11','2023-04-22 11:23:56','回复信息11','2023-04-22 11:23:56','2023-04-22 11:23:56'),(12,12,3,'评论内容12','2023-04-22 11:23:56','回复信息12','2023-04-22 11:23:56','2023-04-22 11:23:56'),(13,13,2,'评论内容13','2023-04-22 11:23:56','回复信息13','2023-04-22 11:23:56','2023-04-22 11:23:56'),(14,14,1,'评论内容14','2023-04-22 11:23:56','回复信息14','2023-04-22 11:23:56','2023-04-22 11:23:56');

/*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,'admin','users','管理员','vy1s3i71bbdasen38iyq4rmu11493jyq','2023-04-22 11:34:29','2023-04-22 14:26:44'),(2,1,'a1','yonghu','用户','qwf3uq14chy89d9ij86jw7vfvq9mzbes','2023-04-22 12:00:22','2023-04-22 14:25: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-04-22 11:23:42');

/*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',2,'1@qq.com','2023-04-22 11:23:56'),(2,'a2','123456','用户姓名2','17703786902','410224199010102002','upload/yonghu2.jpg',1,'2@qq.com','2023-04-22 11:23:56'),(3,'a3','123456','用户姓名3','17703786903','410224199010102003','upload/yonghu3.jpg',1,'3@qq.com','2023-04-22 11:23:56');

/*Table structure for table `youlanjilu` */

DROP TABLE IF EXISTS `youlanjilu`;

CREATE TABLE `youlanjilu` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键 ',
  `yonghu_id` int(11) DEFAULT NULL COMMENT '用户',
  `youlan_tableid` int(11) DEFAULT NULL COMMENT '游览表id',
  `youlan_tablename` varchar(200) DEFAULT NULL COMMENT '游览表名称 Search111 ',
  `youlan_name` varchar(200) DEFAULT NULL COMMENT '名称 Search111 ',
  `youlan_photo` varchar(200) DEFAULT NULL COMMENT '图片',
  `insert_time` timestamp NULL DEFAULT NULL COMMENT '游览时间',
  `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4401 DEFAULT CHARSET=utf8 COMMENT='游览记录';

/*Data for the table `youlanjilu` */

insert  into `youlanjilu`(`id`,`yonghu_id`,`youlan_tableid`,`youlan_tablename`,`youlan_name`,`youlan_photo`,`insert_time`,`create_time`) values (4396,1,4,'shuji','书籍名称4','upload/shuji4.jpg','2023-04-22 13:24:08','2023-04-22 13:24:08'),(4397,1,14,'shuji','书籍名称14','upload/shuji14.jpg','2023-04-22 13:24:13','2023-04-22 13:24:13'),(4398,1,14,'shuji','书籍名称14','upload/shuji14.jpg','2023-04-22 13:24:23','2023-04-22 13:24:23'),(4399,1,14,'shuji','书籍名称14','upload/shuji14.jpg','2023-04-22 13:24:36','2023-04-22 13:24:36'),(4400,1,14,'shuji','书籍名称14','upload/shuji14.jpg','2023-04-22 13:24:57','2023-04-22 13:24:57');

/*Table structure for table `zhangjie` */

DROP TABLE IF EXISTS `zhangjie`;

CREATE TABLE `zhangjie` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键 ',
  `shuji_id` int(11) DEFAULT NULL COMMENT '书籍',
  `zhangjie_name` varchar(200) DEFAULT NULL COMMENT '章节标题  Search111 ',
  `zhangjie_clicknum` int(11) DEFAULT NULL COMMENT '章节热度',
  `zhangjie_xuhao` int(11) DEFAULT NULL COMMENT '序号',
  `zhangjie_content` text COMMENT '章节内容 ',
  `insert_time` timestamp NULL DEFAULT NULL COMMENT '发布时间',
  `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show2 photoShow',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='章节';

/*Data for the table `zhangjie` */

insert  into `zhangjie`(`id`,`shuji_id`,`zhangjie_name`,`zhangjie_clicknum`,`zhangjie_xuhao`,`zhangjie_content`,`insert_time`,`create_time`) values (1,14,'章节标题1',56,14,'章节内容1','2023-04-22 11:23:56','2023-04-22 11:23:56'),(2,14,'章节标题2',443,14,'章节内容2','2023-04-22 11:23:56','2023-04-22 11:23:56'),(3,14,'章节标题3',332,14,'章节内容3','2023-04-22 11:23:56','2023-04-22 11:23:56'),(4,14,'章节标题4',452,14,'章节内容4','2023-04-22 11:23:56','2023-04-22 11:23:56'),(5,14,'章节标题5',139,14,'章节内容5','2023-04-22 11:23:56','2023-04-22 11:23:56'),(6,14,'章节标题6',252,14,'章节内容6','2023-04-22 11:23:56','2023-04-22 11:23:56'),(7,14,'章节标题7',355,14,'章节内容7','2023-04-22 11:23:56','2023-04-22 11:23:56'),(8,14,'章节标题8',334,14,'章节内容8','2023-04-22 11:23:56','2023-04-22 11:23:56'),(9,14,'章节标题9',51,14,'章节内容9','2023-04-22 11:23:56','2023-04-22 11:23:56'),(10,14,'章节标题10',347,14,'章节内容10','2023-04-22 11:23:56','2023-04-22 11:23:56'),(11,14,'章节标题11',492,14,'章节内容11','2023-04-22 11:23:56','2023-04-22 11:23:56'),(12,14,'章节标题12',419,14,'章节内容12','2023-04-22 11:23:56','2023-04-22 11:23:56'),(13,14,'章节标题13',335,14,'章节内容13','2023-04-22 11:23:56','2023-04-22 11:23:56'),(14,14,'章节标题14',171,14,'章节内容14','2023-04-22 11:23:56','2023-04-22 11:23:56');

/*Table structure for table `zhangjie_collection` */

DROP TABLE IF EXISTS `zhangjie_collection`;

CREATE TABLE `zhangjie_collection` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `zhangjie_id` int(11) DEFAULT NULL COMMENT '章节',
  `yonghu_id` int(11) DEFAULT NULL COMMENT '用户',
  `zhangjie_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=15 DEFAULT CHARSET=utf8 COMMENT='章节收藏';

/*Data for the table `zhangjie_collection` */

insert  into `zhangjie_collection`(`id`,`zhangjie_id`,`yonghu_id`,`zhangjie_collection_types`,`insert_time`,`create_time`) values (1,1,3,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(2,2,2,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(3,3,3,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(4,4,3,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(5,5,3,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(7,7,3,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(8,8,1,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(9,9,1,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(10,10,3,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(11,11,3,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(13,13,1,1,'2023-04-22 11:23:56','2023-04-22 11:23:56'),(14,14,3,1,'2023-04-22 11:23:56','2023-04-22 11:23:56');

/*Table structure for table `zhangjie_liuyan` */

DROP TABLE IF EXISTS `zhangjie_liuyan`;

CREATE TABLE `zhangjie_liuyan` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `zhangjie_id` int(11) DEFAULT NULL COMMENT '章节',
  `yonghu_id` int(11) DEFAULT NULL COMMENT '用户',
  `zhangjie_liuyan_text` text COMMENT '评论内容',
  `insert_time` timestamp NULL DEFAULT NULL COMMENT '评论时间',
  `reply_text` text COMMENT '回复内容',
  `update_time` timestamp NULL DEFAULT NULL COMMENT '回复时间',
  `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COMMENT='章节评论';

/*Data for the table `zhangjie_liuyan` */

insert  into `zhangjie_liuyan`(`id`,`zhangjie_id`,`yonghu_id`,`zhangjie_liuyan_text`,`insert_time`,`reply_text`,`update_time`,`create_time`) values (1,1,2,'评论内容1','2023-04-22 11:23:56','回复信息1','2023-04-22 11:23:56','2023-04-22 11:23:56'),(2,2,2,'评论内容2','2023-04-22 11:23:56','回复信息2','2023-04-22 11:23:56','2023-04-22 11:23:56'),(3,3,3,'评论内容3','2023-04-22 11:23:56','回复信息3','2023-04-22 11:23:56','2023-04-22 11:23:56'),(4,4,2,'评论内容4','2023-04-22 11:23:56','回复信息4','2023-04-22 11:23:56','2023-04-22 11:23:56'),(5,5,3,'评论内容5','2023-04-22 11:23:56','回复信息5','2023-04-22 11:23:56','2023-04-22 11:23:56'),(6,6,1,'评论内容6','2023-04-22 11:23:56','回复信息6','2023-04-22 11:23:56','2023-04-22 11:23:56'),(7,7,2,'评论内容7','2023-04-22 11:23:56','回复信息7','2023-04-22 11:23:56','2023-04-22 11:23:56'),(8,8,1,'评论内容8','2023-04-22 11:23:56','回复信息8','2023-04-22 11:23:56','2023-04-22 11:23:56'),(9,9,1,'评论内容9','2023-04-22 11:23:56','回复信息9','2023-04-22 11:23:56','2023-04-22 11:23:56'),(10,10,1,'评论内容10','2023-04-22 11:23:56','回复信息10','2023-04-22 11:23:56','2023-04-22 11:23:56'),(11,11,1,'评论内容11','2023-04-22 11:23:56','回复信息11','2023-04-22 11:23:56','2023-04-22 11:23:56'),(12,12,2,'评论内容12','2023-04-22 11:23:56','回复信息12','2023-04-22 11:23:56','2023-04-22 11:23:56'),(13,13,2,'评论内容13','2023-04-22 11:23:56','回复信息13','2023-04-22 11:23:56','2023-04-22 11:23:56'),(14,14,1,'评论内容14','2023-04-22 11:23:56','回复信息14','2023-04-22 11:23:56','2023-04-22 11:23:56'),(15,1,1,'1111111','2023-04-22 13:24:31','2222','2023-04-22 13:25:35','2023-04-22 13:24:31');

/*!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
 * WeChat  jsjbysj88
*/
@RestController
@Controller
@RequestMapping("/shujiCollection")
public class ShujiCollectionController {
    private static final Logger logger = LoggerFactory.getLogger(ShujiCollectionController.class);

    private static final String TABLE_NAME = "shujiCollection";

    @Autowired
    private ShujiCollectionService shujiCollectionService;

    @Autowired
    private TokenService tokenService;

    @Autowired
    private DictionaryService dictionaryService;//字典
    @Autowired
    private GonggaoService gonggaoService;//公告
    @Autowired
    private ShujiService shujiService;//书籍
    @Autowired
    private ShujiLiuyanService shujiLiuyanService;//书籍评论
    @Autowired
    private YonghuService yonghuService;//用户
    @Autowired
    private YoulanjiluService youlanjiluService;//游览记录
    @Autowired
    private ZhangjieService zhangjieService;//章节
    @Autowired
    private ZhangjieCollectionService zhangjieCollectionService;//章节收藏
    @Autowired
    private ZhangjieLiuyanService zhangjieLiuyanService;//章节评论
    @Autowired
    private UsersService usersService;//管理员

    /**
    * 后端列表
    */
    @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 = shujiCollectionService.queryPage(params);

        //字典表数据转换
        List<ShujiCollectionView> list =(List<ShujiCollectionView>)page.getList();
        for(ShujiCollectionView 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);
        ShujiCollectionEntity shujiCollection = shujiCollectionService.selectById(id);
        if(shujiCollection !=null){
            //entity转view
            ShujiCollectionView view = new ShujiCollectionView();
            BeanUtils.copyProperties( shujiCollection , view );//把实体数据重构到view中
            //级联表 书籍
            //级联表
            ShujiEntity shuji = shujiService.selectById(shujiCollection.getShujiId());
            if(shuji != null){
            BeanUtils.copyProperties( shuji , view ,new String[]{ "id", "createTime", "insertTime", "updateTime", "yonghuId"});//把级联的数据添加到view中,并排除id和创建时间字段,当前表的级联注册表
            view.setShujiId(shuji.getId());
            }
            //级联表 用户
            //级联表
            YonghuEntity yonghu = yonghuService.selectById(shujiCollection.getYonghuId());
            if(yonghu != null){
            BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createTime", "insertTime", "updateTime", "yonghuId"});//把级联的数据添加到view中,并排除id和创建时间字段,当前表的级联注册表
            view.setYonghuId(yonghu.getId());
            }
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view, request);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

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

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永远不会进入");
        else if("用户".equals(role))
            shujiCollection.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));

        Wrapper<ShujiCollectionEntity> queryWrapper = new EntityWrapper<ShujiCollectionEntity>()
            .eq("shuji_id", shujiCollection.getShujiId())
            .eq("yonghu_id", shujiCollection.getYonghuId())
            .eq("shuji_collection_types", shujiCollection.getShujiCollectionTypes())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        ShujiCollectionEntity shujiCollectionEntity = shujiCollectionService.selectOne(queryWrapper);
        if(shujiCollectionEntity==null){
            shujiCollection.setInsertTime(new Date());
            shujiCollection.setCreateTime(new Date());
            shujiCollectionService.insert(shujiCollection);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

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

        String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(false)
//            return R.error(511,"永远不会进入");
//        else if("用户".equals(role))
//            shujiCollection.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));

            shujiCollectionService.updateById(shujiCollection);//根据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<ShujiCollectionEntity> oldShujiCollectionList =shujiCollectionService.selectBatchIds(Arrays.asList(ids));//要删除的数据
        shujiCollectionService.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");
        //.eq("time", new SimpleDateFormat("yyyy-MM-dd").format(new Date()))
        try {
            List<ShujiCollectionEntity> shujiCollectionList = 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){
                            //循环
                            ShujiCollectionEntity shujiCollectionEntity = new ShujiCollectionEntity();
//                            shujiCollectionEntity.setShujiId(Integer.valueOf(data.get(0)));   //书籍 要改的
//                            shujiCollectionEntity.setYonghuId(Integer.valueOf(data.get(0)));   //用户 要改的
//                            shujiCollectionEntity.setShujiCollectionTypes(Integer.valueOf(data.get(0)));   //类型 要改的
//                            shujiCollectionEntity.setInsertTime(date);//时间
//                            shujiCollectionEntity.setCreateTime(date);//时间
                            shujiCollectionList.add(shujiCollectionEntity);


                            //把要查询是否重复的字段放入map中
                        }

                        //查询是否重复
                        shujiCollectionService.insertBatch(shujiCollectionList);
                        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 = shujiCollectionService.queryPage(params);

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

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

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

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

                //级联表
                    ShujiEntity shuji = shujiService.selectById(shujiCollection.getShujiId());
                if(shuji != null){
                    BeanUtils.copyProperties( shuji , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setShujiId(shuji.getId());
                }
                //级联表
                    YonghuEntity yonghu = yonghuService.selectById(shujiCollection.getYonghuId());
                if(yonghu != null){
                    BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setYonghuId(yonghu.getId());
                }
                //修改对应字典表字段
                dictionaryService.dictionaryConvert(view, request);
                if(String.valueOf(request.getSession().getAttribute("role")).equals("用户"))//只有 用户 才能添加游览记录
                    youlanjiluService.insertYoulanjilu((Integer) request.getSession().getAttribute("userId"),TABLE_NAME,shuji.getId(),shuji.getShujiName(),shuji.getShujiPhoto());
                return R.ok().put("data", view);
            }else {
                return R.error(511,"查不到数据");
            }
    }

    /**
    * 前端保存
    */
    @RequestMapping("/add")
    public R add(@RequestBody ShujiCollectionEntity shujiCollection, HttpServletRequest request){
        logger.debug("add方法:,,Controller:{},,shujiCollection:{}",this.getClass().getName(),shujiCollection.toString());
        Wrapper<ShujiCollectionEntity> queryWrapper = new EntityWrapper<ShujiCollectionEntity>()
            .eq("shuji_id", shujiCollection.getShujiId())
            .eq("yonghu_id", shujiCollection.getYonghuId())
            .eq("shuji_collection_types", shujiCollection.getShujiCollectionTypes())
//            .notIn("shuji_collection_types", new Integer[]{102})
            ;
        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        ShujiCollectionEntity shujiCollectionEntity = shujiCollectionService.selectOne(queryWrapper);
        if(shujiCollectionEntity==null){
            shujiCollection.setInsertTime(new Date());
            shujiCollection.setCreateTime(new Date());
        shujiCollectionService.insert(shujiCollection);

            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.ShujiCollectionEntity;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.lang.Nullable;
import java.util.List;

/**
 * 我的书架 服务类
 */
public interface ShujiCollectionService extends IService<ShujiCollectionEntity> {

    /**
    * @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.ShujiCollectionDao;
import com.entity.ShujiCollectionEntity;
import com.service.ShujiCollectionService;
import com.entity.view.ShujiCollectionView;

/**
 * 我的书架 服务实现类
 */
@Service("shujiCollectionService")
@Transactional
public class ShujiCollectionServiceImpl extends ServiceImpl<ShujiCollectionDao, ShujiCollectionEntity> implements ShujiCollectionService {

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

}

5.4 我的书架Dao模块

package com.dao;

import com.entity.ShujiCollectionEntity;
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.ShujiCollectionView;

/**
 * 我的书架 Dao 接口
 *
 * @author 学长编程
 * WeChat  jsjbysj88 
*/
public interface ShujiCollectionDao extends BaseMapper<ShujiCollectionEntity> {

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

}

6、论文目录结构

7、源码获取

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

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

获取源码请私信

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

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

相关文章

【Maven】下载及配置

文章目录 1. 定义2. 下载3. 解压4. 配置环境变量5. 验证6. 特性 1. 定义 Maven 是一个跨平台的项目管理工具。作为 Apache 组织的一个颇为成功的开源项目&#xff0c;其主要服务于基于 Java 平台的项目创建&#xff0c;依赖管理和项目信息管理&#xff0c;是一个自动化构建工具…

HTML---利用CSS3制作网页动画

文章目录 目录 文章目录 本章目标 一.CSS3概述 CSS函数概述 二.CSS3变形 transform属性 translate()&#xff1a;平移函数 scale()&#xff1a;缩放函数 rotate()&#xff1a;旋转函数 skew()&#xff1a;倾斜函数 三.CSS3过渡 四.CSS动画 练习 旋转按钮 本章目标 会使用…

AJAX: 整理2:学习原生的AJAX,这边借助express框架

1. npm install express 终端直接安装 2. 测试案例&#xff1a;Hello World&#xff01; 新建一个express.js的文件&#xff0c;写入下方的内容 // 1. 引入express const express require(express)// 2. 创建服务器 const app express()// 3.创建路由规则 // request 是对请…

2023年全国网络安全行业职业技能大赛数据安全管理员操作技能赛题(样题)

2023年全国网络安全行业职业技能大赛数据安全管理员操作技能赛题(样题) 2023年全国网络安全行业职业技能大赛数据安全管理员操作技能赛题(样题) 第一部分&#xff1a;数据安全防护(30%) 第二部分&#xff1a;数据安全管理(30%) 第三部分&#xff1a;数据安全处置(40%) 项目介绍…

Python 中的 Iterable 和 Iterator(Iterable and Iterator in Python)

Python 中的 Iterable 和 Iterator(Iterable and Iterator in Python) 文章目录 Python 中的 Iterable 和 Iterator(Iterable and Iterator in Python)Introduction 导言Iterable VS Iterator为什么 Python 有这种特殊的设计special design?如何获取迭代器Iterator&#xff1f…

SpringCloud 和 Linux 八股文第三期五问五答

SpringCloud 和 Linux 八股文第三期五问五答 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;Linux常用命令 2&#xff09;如何查看测试项目的日志 一…

Docker (compose、安装、常用命令整理、compose编排) -day06

一、概念 Docker-Compose就是容器编排&#xff0c;负责实现对Docker容器集群的快速编排 Compose允许用户通过一个单独的docker-compose.yml模板文件&#xff08;YAML 格式&#xff09;来定义一组相关联的应用容器为一个项目&#xff08;project&#xff09;。 可以很容易地用一…

Python数值型字符串校验

从键盘输入一行字符串&#xff0c;编写Python代码判定字符串是python“合法”数值。 (笔记模板由python脚本于2023年12月25日 18:00:52创建&#xff0c;本篇笔记适合熟悉Python符串基本数据类型的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.py…

2023年终总结 —— 我和CSDN相遇的第一年之“技术学习和个人成长的回顾与展望”

​ ​ &#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 &#x1f38a;对2023的总结与回顾&#x1f38a; &#x1f3c5;获奖记录 &#x1f4da;学…

1、gdb基本功能

文章目录 1、gdb1.1、运行1.1.1、程序入参 1.2、断点及观察点1.2.1、设置断点1.2.2、禁用、删除断点1.2.3、观察点 1.3、打印1.3.1、设定打印参数1.3.2、打印数据1.3.3、自动打印1.3.4、按照地址打印 linux下我现在接触到的常用调试工具如下. gbdgdbguicmake-tools gdb是最为通…

SLAM学习入门--传统图像处理

文章目录 传统图像处理颜色空间高斯滤波腐蚀和膨胀开运算和闭运算如何求一张图片的均值&#xff1f;线性插值双线性插值仿射变换透视变换常见的边缘检测算子Sobel 算法Canny 算法Hough 变换原理&#xff08;直线和圆检测&#xff09;找轮廓&#xff08;findCountours&#xff0…

【网络安全 | Misc】Aesop_secret(ISCC)

正文 动态gif&#xff0c;使用工具进行分解&#xff1a; https://tu.sioe.cn/gj/fenjie/ 得到ISCC字样 由Winhex看到密文&#xff1a; U2FsdGVkX19QwGkcgD0fTjZxgijRzQOGbCWALh4sRDec2w6xsY/ux53Vuj/AMZBDJ87qyZL5kAf1fmAH4Oe13Iu435bfRBuZgHpnRjTBn5xsDHONiR3t0Oa8yG/tOKJMN…

故障诊断模型 | Maltab实现PSO-BP粒子群算法优化BP神经网络的故障诊断

文章目录 效果一览文章概述模型描述源码设计参考资料效果一览 文章概述 故障诊断模型 | Maltab实现PSO-BP粒子群算法优化BP神经网络的故障诊断 模型描述 在机器学习领域,我们常常需要通过训练数据来学习一个函数模型,以便在未知的数据上进行预测或分类。传统的神经网络模型需…

【大模型的前世今生】从自然语言处理说起

自然语言处理&#xff08;Natural Language Processing&#xff0c;简称NLP&#xff09;被誉为人工智能皇冠上的明珠&#xff0c;是计算机科学和人工智能领域的一个重要方向。它主要研究人与计算机之间&#xff0c;使用自然语言进行有效通信的各种理论和方法。简单来说&#xf…

基于 CefSharp 实现一个文件小工具

I’m not saying you can’t be financially successful I’m saying have a greater purpose in life well beyond the pursuit of financial success Your soul is screaming for you to answer your true calling You can change today if you redefine what success is to …

网络安全—认证技术

文章目录 加密认证对称密钥体制公钥密码体制公钥的加密公钥身份认证和加密 鉴别码认证MAC鉴别码 报文摘要认证认证 加密只认证数字签名 通过了解以前前辈们使用的消息认证慢慢渐进到现代的完整的认证体系。所以在学习的时候也很蒙圈&#xff0c;因为前期的很多技术都是有很严重…

matplotlib单变量和双变量可视化

使用seaborn 库的tips数据集&#xff0c;其中包含了某餐厅服务员收集的顾客付小费的相关数据&#xff08;评论区&#xff09; 单变量可视化 直方图 直方图是观察单个变量最常用的方法。这些值是经过"装箱"&#xff08;bin&#xff09;处理的 直方图会将数据分组后绘…

Vlan的封装模式和端口讲解(Access、Trunk、Hypbrid端口)

目录 Vlan的封装模式 ISL协议 802.1Q协议 二层接口类型 Access接口 Trunk接口 Hybrid接口 不同Vlan之间的通信 Vlan的作用&#xff08;Vlan工作于OSI参考模型的第二层&#xff09; Vlan&#xff08;Virtual Local Area Network&#xff09;虚拟局域网&#xff0c;将一个…

格密码基础:子格,q-ary垂直格与线性代数

目录 一.写在前面 二.子空间垂直 2.1 理论解释 2.2 举例分析 三. 零空间 3.1 零空间与q-ary垂直格 3.2 零空间与行/列空间 四. 格密码相关 一.写在前面 格密码中的很多基础原语都来自于线性代数的基本概念&#xff0c;比如举几个例子&#xff1a; 格密码中的非满秩格…

年底离职了?2024普通人失业怎么创业?2024创业风口!

有多少人会在12月份离职&#xff1f;这是近期热门的话题&#xff0c;年底了&#xff0c;离职潮也来了。是工作压力大?是跟同事相处不好&#xff1f;是公司发展没前景&#xff1f;不&#xff0c;统统都不是。离职无外乎一个原因&#xff1a;工资低&#xff01; 我们除了打工还…