江西网站备案要求,扬州做机床公司网站,公司网站建设怎么,天津开发区建网站公司期末作业 为了水一水期末作业#xff0c;打算写一个简易的单体架构图书管理系统。以下为后端主要技术栈(后期可能更新#xff0c;打算一个星期左右写完吧)。 springbootredismysqlspringcachespringsecurity … 数据库设计 第一次从0开始搭建后续可能还会多更新一些表。 -- 角…期末作业 为了水一水期末作业打算写一个简易的单体架构图书管理系统。以下为后端主要技术栈(后期可能更新打算一个星期左右写完吧)。 springbootredismysqlspringcachespringsecurity … 数据库设计 第一次从0开始搭建后续可能还会多更新一些表。 -- 角色表
CREATE TABLE Role (role_id INT PRIMARY KEY AUTO_INCREMENT,role_name VARCHAR(50) NOT NULL,description VARCHAR(255)
);INSERT INTO Role (role_name, description) VALUES
(管理员, 拥有全部权限),
(普通用户, 常规用户权限);-- 用户表
CREATE TABLE User (user_id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(50) UNIQUE NOT NULL,password VARCHAR(255) NOT NULL,contact_info VARCHAR(100),role_id INT,created_at DATETIME DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,FOREIGN KEY (role_id) REFERENCES Role(role_id)
);INSERT INTO User (username, password, contact_info, role_id) VALUES
(张三, hashed_password_1, zhangsanexample.com, 1),
(李四, hashed_password_2, lisiexample.com, 2),
(王五, hashed_password_3, wangwuexample.com, 2),
(赵六, hashed_password_4, zhaoliuexample.com, 2),
(孙七, hashed_password_5, sunqiexample.com, 2);-- 图书分类表
CREATE TABLE Category (category_id INT PRIMARY KEY AUTO_INCREMENT,category_name VARCHAR(100) NOT NULL,description TEXT
);INSERT INTO Category (category_name, description) VALUES
(小说, 小说类书籍),
(非小说, 基于真实事实的信息书籍),
(科幻, 未来和科学内容的书籍),
(经典, 经典文学书籍),
(历史, 基于历史事件的书籍);-- 作者表
CREATE TABLE Author (author_id INT PRIMARY KEY AUTO_INCREMENT,author_name VARCHAR(100) NOT NULL,bio TEXT
);INSERT INTO Author (author_name, bio) VALUES
(菲茨杰拉德, 美国小说家代表作《了不起的盖茨比》),
(哈珀·李, 美国小说家著有《杀死一只知更鸟》),
(乔治·奥威尔, 英国小说家著有《1984》),
(赫尔曼·梅尔维尔, 美国小说家著有《白鲸》),
(列夫·托尔斯泰, 俄罗斯作家著有《战争与和平》);-- 图书表
CREATE TABLE Book (book_id INT PRIMARY KEY AUTO_INCREMENT,title VARCHAR(255) NOT NULL,publisher VARCHAR(100),isbn VARCHAR(20) UNIQUE,category_id INT,author_id INT,stock INT DEFAULT 0,status ENUM(可借, 借出, 丢失, 损坏) DEFAULT 可借,created_at DATETIME DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,FOREIGN KEY (category_id) REFERENCES Category(category_id),FOREIGN KEY (author_id) REFERENCES Author(author_id)
);INSERT INTO Book (title, publisher, isbn, category_id, author_id, stock, status) VALUES
(了不起的盖茨比, 上海译文出版社, 9787544265477, 1, 1, 5, 可借),
(杀死一只知更鸟, 南海出版公司, 9787544291179, 2, 2, 2, 借出),
(1984, 人民文学出版社, 9787020115106, 3, 3, 10, 可借),
(白鲸, 译林出版社, 9787544734804, 1, 4, 3, 损坏),
(战争与和平, 北京燕山出版社, 9787544283792, 2, 5, 7, 可借);-- 图书标签表
CREATE TABLE Tag (tag_id INT PRIMARY KEY AUTO_INCREMENT,tag_name VARCHAR(50) NOT NULL
);INSERT INTO Tag (tag_name) VALUES
(经典), (戏剧), (反乌托邦), (冒险), (历史小说);-- 图书标签关联表
CREATE TABLE BookTags (book_id INT,tag_id INT,PRIMARY KEY (book_id, tag_id),FOREIGN KEY (book_id) REFERENCES Book(book_id),FOREIGN KEY (tag_id) REFERENCES Tag(tag_id)
);INSERT INTO BookTags (book_id, tag_id) VALUES
(1, 1), (2, 2), (3, 3), (4, 4), (5, 5);-- 用户收藏表
CREATE TABLE UserFavorites (user_id INT,book_id INT,favorited_at DATETIME DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (user_id, book_id),FOREIGN KEY (user_id) REFERENCES User(user_id),FOREIGN KEY (book_id) REFERENCES Book(book_id)
);INSERT INTO UserFavorites (user_id, book_id, favorited_at) VALUES
(1, 1, 2024-06-01),
(2, 2, 2024-06-02),
(3, 3, 2024-06-03),
(4, 4, 2024-06-04),
(5, 5, 2024-06-05);-- 图书评价表
CREATE TABLE BookReview (review_id INT PRIMARY KEY AUTO_INCREMENT,user_id INT,book_id INT,rating INT,review_text TEXT,review_date DATE,created_at DATETIME DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,FOREIGN KEY (user_id) REFERENCES User(user_id),FOREIGN KEY (book_id) REFERENCES Book(book_id)
);INSERT INTO BookReview (user_id, book_id, rating, review_text, review_date) VALUES
(1, 1, 5, 经典之作令人难忘, 2024-06-01),
(2, 2, 4, 情感丰富发人深省, 2024-06-02),
(3, 3, 5, 震撼而深刻, 2024-06-03),
(4, 4, 3, 充满冒险的经典之作, 2024-06-04),
(5, 5, 4, 引人深思, 2024-06-05);-- 借阅记录表
CREATE TABLE BorrowRecord (borrow_id INT PRIMARY KEY AUTO_INCREMENT,user_id INT,book_id INT,borrow_date DATE,due_date DATE,return_date DATE,is_overdue BOOLEAN DEFAULT FALSE,overdue_fine DECIMAL(5, 2),FOREIGN KEY (user_id) REFERENCES User(user_id),FOREIGN KEY (book_id) REFERENCES Book(book_id)
);INSERT INTO BorrowRecord (user_id, book_id, borrow_date, due_date, return_date, is_overdue, overdue_fine) VALUES
(1, 1, 2024-01-01, 2024-01-15, NULL, FALSE, NULL),
(2, 2, 2024-02-01, 2024-02-15, NULL, TRUE, 10.00),
(3, 3, 2024-03-01, 2024-03-15, 2024-03-20, TRUE, 5.00),
(4, 4, 2024-04-01, 2024-04-15, NULL, FALSE, NULL),
(5, 5, 2024-05-01, 2024-05-15, NULL, FALSE, NULL);
实体类的创建
1. Role 实体类
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;Data
NoArgsConstructor
AllArgsConstructor
Builder
ApiModel(description 角色实体)
public class Role {ApiModelProperty(value 角色ID, required true)private Integer roleId;ApiModelProperty(value 角色名称, required true)private String roleName;ApiModelProperty(value 角色描述)private String description;
}2. User 实体类
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;
import java.time.LocalDateTime;Data
NoArgsConstructor
AllArgsConstructor
Builder
ApiModel(description 用户实体)
public class User {ApiModelProperty(value 用户ID, required true)private Integer userId;ApiModelProperty(value 用户名, required true)private String username;ApiModelProperty(value 用户密码, required true)private String password;ApiModelProperty(value 联系信息)private String contactInfo;ApiModelProperty(value 角色ID)private Integer roleId;ApiModelProperty(value 创建时间)private LocalDateTime createdAt;ApiModelProperty(value 更新时间)private LocalDateTime updatedAt;
}3. Category 实体类
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;Data
NoArgsConstructor
AllArgsConstructor
Builder
ApiModel(description 图书分类实体)
public class Category {ApiModelProperty(value 分类ID, required true)private Integer categoryId;ApiModelProperty(value 分类名称, required true)private String categoryName;ApiModelProperty(value 分类描述)private String description;
}4. Author 实体类
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;Data
NoArgsConstructor
AllArgsConstructor
Builder
ApiModel(description 作者实体)
public class Author {ApiModelProperty(value 作者ID, required true)private Integer authorId;ApiModelProperty(value 作者名称, required true)private String authorName;ApiModelProperty(value 作者简介)private String bio;
}5. Book 实体类
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;
import java.time.LocalDateTime;Data
NoArgsConstructor
AllArgsConstructor
Builder
ApiModel(description 图书实体)
public class Book {ApiModelProperty(value 书籍ID, required true)private Integer bookId;ApiModelProperty(value 书名, required true)private String title;ApiModelProperty(value 出版社)private String publisher;ApiModelProperty(value ISBN, required true)private String isbn;ApiModelProperty(value 分类ID)private Integer categoryId;ApiModelProperty(value 作者ID)private Integer authorId;ApiModelProperty(value 库存, required true)private Integer stock;ApiModelProperty(value 状态, allowableValues 可借, 借出, 丢失, 损坏, required true)private String status;ApiModelProperty(value 创建时间)private LocalDateTime createdAt;ApiModelProperty(value 更新时间)private LocalDateTime updatedAt;
}6. Tag 实体类
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;Data
NoArgsConstructor
AllArgsConstructor
Builder
ApiModel(description 图书标签实体)
public class Tag {ApiModelProperty(value 标签ID, required true)private Integer tagId;ApiModelProperty(value 标签名称, required true)private String tagName;
}7. BookTags 实体类
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;Data
NoArgsConstructor
AllArgsConstructor
Builder
ApiModel(description 图书与标签关联实体)
public class BookTags {ApiModelProperty(value 书籍ID, required true)private Integer bookId;ApiModelProperty(value 标签ID, required true)private Integer tagId;
}8. UserFavorites 实体类
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;
import java.time.LocalDateTime;Data
NoArgsConstructor
AllArgsConstructor
Builder
ApiModel(description 用户收藏实体)
public class UserFavorites {ApiModelProperty(value 用户ID, required true)private Integer userId;ApiModelProperty(value 书籍ID, required true)private Integer bookId;ApiModelProperty(value 收藏时间)private LocalDateTime favoritedAt;
}9. BookReview 实体类
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;
import java.time.LocalDate;
import java.time.LocalDateTime;Data
NoArgsConstructor
AllArgsConstructor
Builder
ApiModel(description 图书评价实体)
public class BookReview {ApiModelProperty(value 评价ID, required true)private Integer reviewId;ApiModelProperty(value 用户ID, required true)private Integer userId;ApiModelProperty(value 书籍ID, required true)private Integer bookId;ApiModelProperty(value 评分, required true)private Integer rating;ApiModelProperty(value 评价内容)private String reviewText;ApiModelProperty(value 评价日期)private LocalDate reviewDate;ApiModelProperty(value 创建时间)private LocalDateTime createdAt;ApiModelProperty(value 更新时间)private LocalDateTime updatedAt;
}10. BorrowRecord 实体类
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;
import java.math.BigDecimal;
import java.time.LocalDate;Data
NoArgsConstructor
AllArgsConstructor
Builder
ApiModel(description 借阅记录实体)
public class BorrowRecord {ApiModelProperty(value 借阅ID, required true)private Integer borrowId;ApiModelProperty(value 用户ID, required true)private Integer userId;ApiModelProperty(value 书籍ID, required true)private Integer bookId;ApiModelProperty(value 借阅日期)private LocalDate borrowDate;ApiModelProperty(value 到期日期)private LocalDate dueDate;ApiModelProperty(value 归还日期)private LocalDate returnDate;ApiModelProperty(value 是否逾期, required true)private Boolean isOverdue;ApiModelProperty(value 逾期罚金)private BigDecimal overdueFine;
}说明
ApiModel用于描述类的作用提供整体说明。ApiModelProperty用于描述类属性的具体信息包括必需性、描述等。
这些注解将帮助你在 Knife4j 中更好地可视化和理解你的实体类及其属性。确保在项目中引入相关的 Swagger 依赖以便这些注解能够正常工作。
配置文件
spring:datasource:# druid:解除注释时记得把下面几行按 TAB 往后推进一下driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/mylibrary?useUnicodetruecharacterEncodingutf-8useSSLfalseserverTimezoneAsia/Shanghaiusername: rootpassword: 123456
# redis:
# host: localhost
# port: 6379
# password: 123321
# database: 2
mybatis:#mapper配置文件mapper-locations: classpath:mapper/*.xmltype-aliases-package: com.advanced.mylibrary.pojoconfiguration:#开启驼峰命名map-underscore-to-camel-case: true# 这个配置会将执行的sql打印出来在开发或测试的时候可以用log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
logging:level:com:homework:mapper: debugservice: infocontroller: info依赖
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom/groupIdartifactIdMyLibrary/artifactIdversion0.0.1-SNAPSHOT/versionnameMyLibrary/namedescriptionMyLibrary/descriptionpropertiesjava.version1.8/java.versionproject.build.sourceEncodingUTF-8/project.build.sourceEncodingproject.reporting.outputEncodingUTF-8/project.reporting.outputEncodingspring-boot.version2.6.13/spring-boot.versionswagger.version3.0.3/swagger.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-jdbc/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-devtools/artifactIdscoperuntime/scopeoptionaltrue/optional/dependencydependencygroupIdcom.mysql/groupIdartifactIdmysql-connector-j/artifactIdscoperuntime/scope/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdcom.github.xiaoymin/groupIdartifactIdknife4j-spring-boot-starter/artifactIdversion${swagger.version}/version/dependencydependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion 5.8.16/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency/dependenciesdependencyManagementdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-dependencies/artifactIdversion${spring-boot.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementbuildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion3.8.1/versionconfigurationsource1.8/sourcetarget1.8/targetencodingUTF-8/encoding/configuration/pluginplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdversion${spring-boot.version}/versionconfigurationmainClasscom.mylibrary.MyLibraryApplication/mainClassskiptrue/skip/configurationexecutionsexecutionidrepackage/idgoalsgoalrepackage/goal/goals/execution/executions/plugin/plugins/build/project
文章转载自: http://www.morning.lmdkn.cn.gov.cn.lmdkn.cn http://www.morning.hrpjx.cn.gov.cn.hrpjx.cn http://www.morning.mzskr.cn.gov.cn.mzskr.cn http://www.morning.benqc.com.gov.cn.benqc.com http://www.morning.mrcpy.cn.gov.cn.mrcpy.cn http://www.morning.lynb.cn.gov.cn.lynb.cn http://www.morning.lfdrq.cn.gov.cn.lfdrq.cn http://www.morning.tgczj.cn.gov.cn.tgczj.cn http://www.morning.ktlfb.cn.gov.cn.ktlfb.cn http://www.morning.sxfnf.cn.gov.cn.sxfnf.cn http://www.morning.mdwtm.cn.gov.cn.mdwtm.cn http://www.morning.ysckr.cn.gov.cn.ysckr.cn http://www.morning.dyfmh.cn.gov.cn.dyfmh.cn http://www.morning.yuminfo.com.gov.cn.yuminfo.com http://www.morning.znknj.cn.gov.cn.znknj.cn http://www.morning.nmngq.cn.gov.cn.nmngq.cn http://www.morning.bwmq.cn.gov.cn.bwmq.cn http://www.morning.srgbr.cn.gov.cn.srgbr.cn http://www.morning.qkkmd.cn.gov.cn.qkkmd.cn http://www.morning.xprzq.cn.gov.cn.xprzq.cn http://www.morning.nccqs.cn.gov.cn.nccqs.cn http://www.morning.lblsx.cn.gov.cn.lblsx.cn http://www.morning.yfrbn.cn.gov.cn.yfrbn.cn http://www.morning.ljqd.cn.gov.cn.ljqd.cn http://www.morning.tcxk.cn.gov.cn.tcxk.cn http://www.morning.sbjhm.cn.gov.cn.sbjhm.cn http://www.morning.yrjkz.cn.gov.cn.yrjkz.cn http://www.morning.gjlxn.cn.gov.cn.gjlxn.cn http://www.morning.nwtmy.cn.gov.cn.nwtmy.cn http://www.morning.dtrz.cn.gov.cn.dtrz.cn http://www.morning.rbylq.cn.gov.cn.rbylq.cn http://www.morning.gcspr.cn.gov.cn.gcspr.cn http://www.morning.wqpr.cn.gov.cn.wqpr.cn http://www.morning.wfmqc.cn.gov.cn.wfmqc.cn http://www.morning.bgqqr.cn.gov.cn.bgqqr.cn http://www.morning.qyjqj.cn.gov.cn.qyjqj.cn http://www.morning.dnwlb.cn.gov.cn.dnwlb.cn http://www.morning.sxbgc.cn.gov.cn.sxbgc.cn http://www.morning.npbkx.cn.gov.cn.npbkx.cn http://www.morning.rzjfn.cn.gov.cn.rzjfn.cn http://www.morning.bxczt.cn.gov.cn.bxczt.cn http://www.morning.pkrtz.cn.gov.cn.pkrtz.cn http://www.morning.jpgfx.cn.gov.cn.jpgfx.cn http://www.morning.qkpzq.cn.gov.cn.qkpzq.cn http://www.morning.tlnkz.cn.gov.cn.tlnkz.cn http://www.morning.lxhgj.cn.gov.cn.lxhgj.cn http://www.morning.qnyf.cn.gov.cn.qnyf.cn http://www.morning.kryr.cn.gov.cn.kryr.cn http://www.morning.bpmnh.cn.gov.cn.bpmnh.cn http://www.morning.mysmz.cn.gov.cn.mysmz.cn http://www.morning.chehb.com.gov.cn.chehb.com http://www.morning.ywrt.cn.gov.cn.ywrt.cn http://www.morning.tknqr.cn.gov.cn.tknqr.cn http://www.morning.jpbpc.cn.gov.cn.jpbpc.cn http://www.morning.kflpf.cn.gov.cn.kflpf.cn http://www.morning.sjgsh.cn.gov.cn.sjgsh.cn http://www.morning.tyhfz.cn.gov.cn.tyhfz.cn http://www.morning.cszbj.cn.gov.cn.cszbj.cn http://www.morning.zfqr.cn.gov.cn.zfqr.cn http://www.morning.gkmwx.cn.gov.cn.gkmwx.cn http://www.morning.fxzgw.com.gov.cn.fxzgw.com http://www.morning.bcngs.cn.gov.cn.bcngs.cn http://www.morning.rdfq.cn.gov.cn.rdfq.cn http://www.morning.dgpxp.cn.gov.cn.dgpxp.cn http://www.morning.kgxyd.cn.gov.cn.kgxyd.cn http://www.morning.xnpml.cn.gov.cn.xnpml.cn http://www.morning.qymqh.cn.gov.cn.qymqh.cn http://www.morning.ljyqn.cn.gov.cn.ljyqn.cn http://www.morning.lcjw.cn.gov.cn.lcjw.cn http://www.morning.ygrkg.cn.gov.cn.ygrkg.cn http://www.morning.wnjrf.cn.gov.cn.wnjrf.cn http://www.morning.kkjhj.cn.gov.cn.kkjhj.cn http://www.morning.frsxt.cn.gov.cn.frsxt.cn http://www.morning.fyzsq.cn.gov.cn.fyzsq.cn http://www.morning.gbjxj.cn.gov.cn.gbjxj.cn http://www.morning.kndst.cn.gov.cn.kndst.cn http://www.morning.rghkg.cn.gov.cn.rghkg.cn http://www.morning.txysr.cn.gov.cn.txysr.cn http://www.morning.qwpdl.cn.gov.cn.qwpdl.cn http://www.morning.linzhigongmao.cn.gov.cn.linzhigongmao.cn