当前位置: 首页 > news >正文

【图书管理系统】环境介绍、设计数据库和表、配置文件、引入依赖

0. 环境介绍

(1)JDK版本:JDK_8(JDK_1.8)
(2)Java语言版本:8
(3)SpringBoot版本:2.6.13
(4)Maven仓库:阿里云
(5)MySQL版本:8.0.41(Ubuntu0.20.04.1)

1. 建数据库和表

1.1 数据库表设计介绍

数据库表是应⽤程序开发中的⼀个重要环节, 数据库表的设计往往会决定我们的应⽤需求是否能顺利实现,甚⾄决定我们的实现⽅式.

如何设计表以及这些表有哪些字段, 这些表存在哪些关系 也是⾮常重要的.

数据库表设计是依据业务需求来设计的. 如何设计出优秀的数据库表, 与经验有很⼤关系.

数据库表通常分两种: 实体表和关系表.
分析我们的需求, 图书管理系统相对来说⽐较简单, 只有两个实体: ⽤⼾和图书, 并且⽤⼾和图书之间没有关联关系

表的具体字段设计, 也与需求有关.
⽤⼾表有⽤⼾名和密码即可(复杂的业务可能还涉及昵称, 年龄等资料)
图书表有哪些字段, 也是参考需求页面(通常不是⼀个页面决定的, 而是要对整个系统进⾏全⾯分析观察后定的。

1.2 创建数据库和表

--创建数据库 book_management_system
DROP DATABASE IF EXISTS book_management_system;
CREATE DATABASE book_management_system DEFAULT CHARACTER SET utf8mb4;-- 切换数据库
use book_management_system-- user_info ⽤户表
DROP TABLE IF EXISTS user_info;
CREATE TABLE user_info (`id` INT NOT NULL AUTO_INCREMENT,`user_name` VARCHAR ( 128 ) NOT NULL,`password` VARCHAR ( 128 ) NOT NULL,`delete_flag` TINYINT ( 4 ) NULL DEFAULT 0,`create_time` DATETIME DEFAULT now(),`update_time` DATETIME DEFAULT now() ON UPDATE now(),PRIMARY KEY ( `id` ),
UNIQUE INDEX `user_name_UNIQUE` ( `user_name` ASC )) ENGINE = INNODB DEFAULT
CHARACTER
SET = utf8mb4 COMMENT = '用户表';-- book_info 图书表
DROP TABLE IF EXISTS book_info;
CREATE TABLE `book_info` (`id` INT ( 11 ) NOT NULL AUTO_INCREMENT,`book_name` VARCHAR ( 127 ) NOT NULL,`author` VARCHAR ( 127 ) NOT NULL,`count` INT ( 11 ) NOT NULL,`price` DECIMAL (7,2 ) NOT NULL,`publish` VARCHAR ( 256 ) NOT NULL,`status` TINYINT ( 4 ) DEFAULT 1 COMMENT '0-⽆效, 1-正常, 2-不允许借阅',`create_time` DATETIME DEFAULT now(),`update_time` DATETIME DEFAULT now() ON UPDATE now(),
PRIMARY KEY ( `id` ) 
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4;-- 初始化数据
INSERT INTO user_info ( user_name, password ) VALUES ( "admin", "admin" );-- 初始化图书数据
INSERT INTO `book_info` (book_name,author,count, price, publish) VALUES ('阿Q正传', '鲁迅', 29, 22.00, '应急管理出版社');
INSERT INTO `book_info` (book_name,author,count, price, publish) VALUES ('漫画讲透经济学', '杜赢', 5, 98.56, '四川人民出版社');
INSERT INTO `book_info` (book_name,author,count, price, publish) VALUES ('三体', '刘慈欣', 9, 102.67, '重庆出版社');
INSERT INTO `book_info` (book_name,author,count, price, publish) VALUES ('纳兰容若传', '李婍', 16, 178.00, '台海出版社');
INSERT INTO `book_info` (book_name,author,count, price, publish) VALUES ('人类简史', '尤瓦尔·赫拉利', 34, 68.50, '中信出版社');
INSERT INTO `book_info` (book_name,author,count, price, publish) VALUES ('Python编程从入门到实践', 'Eric Matthes', 22, 89.00, '人民邮电出版社');
INSERT INTO `book_info` (book_name,author,count, price, publish) VALUES ('百年孤独', '加西亚·马尔克斯', 17, 55.80, '南海出版公司');
INSERT INTO `book_info` (book_name,author,count, price, publish) VALUES ('时间简史', '史蒂芬·霍金', 9, 72.30, '湖南科学技术出版社');
INSERT INTO `book_info` (book_name,author,count, price, publish) VALUES ('活着', '余华', 45, 36.90, '作家出版社');
INSERT INTO `book_info` (book_name,author,count, price, publish) VALUES ('机器学习实战', 'Peter Harrington', 12, 118.00, '机械工业出版社');
INSERT INTO `book_info` (book_name,author,count, price, publish) VALUES ('明朝那些事儿', '当年明月', 28, 198.50, '中国海关出版社');
INSERT INTO `book_info` (book_name,author,count, price, publish) VALUES ('乌合之众', '古斯塔夫·勒庞', 19, 42.60, '中央编译出版社');
INSERT INTO `book_info` (book_name,author,count, price, publish) VALUES ('算法导论', 'Thomas H.Cormen', 7, 156.00, '清华大学出版社');
INSERT INTO `book_info` (book_name,author,count, price, publish) VALUES ('平凡的世界', '路遥', 33, 125.00, '北京十月文艺出版社');
INSERT INTO `book_info` (book_name,author,count, price, publish) VALUES ('追风筝的人', '卡勒德·胡赛尼', 24, 49.90, '上海人民出版社');
INSERT INTO `book_info` (book_name,author,count, price, publish) VALUES ('深入理解Java虚拟机', '周志明', 15, 99.00, '电子工业出版社');
INSERT INTO `book_info` (book_name,author,count, price, publish) VALUES ('小王子', '安托万·德·圣-埃克苏佩里', 50, 29.90, '人民文学出版社');
INSERT INTO `book_info` (book_name,author,count, price, publish) VALUES ('失控', '凯文·凯利', 11, 88.00, '新星出版社');
INSERT INTO `book_info` (book_name,author,count, price, publish) VALUES ('白夜行', '东野圭吾', 31, 65.50, '南海出版公司');
INSERT INTO `book_info` (book_name,author,count, price, publish) VALUES ('思考,快与慢', '丹尼尔·卡尼曼', 8, 78.60, '中信出版社');
INSERT INTO `book_info` (book_name,author,count, price, publish) VALUES ('浪潮之巅', '吴军', 14, 108.00, '人民邮电出版社');
INSERT INTO `book_info` (book_name,author,count, price, publish) VALUES ('围城', '钱钟书', 27, 45.00, '人民文学出版社');
INSERT INTO `book_info` (book_name,author,count, price, publish) VALUES ('黑客与画家', 'Paul Graham', 6, 66.60, '人民邮电出版社');
INSERT INTO `book_info` (book_name,author,count, price, publish) VALUES ('沉默的大多数', '王小波', 38, 58.80, '北京十月文艺出版社');

在业务中一般都会

2.配置文件和引入依赖

2.1 application.yml文件配置

# 数据库连接配置
spring:datasource:# MySQL在远程服务器上url: jdbc:mysql://x.x.x.x:3306/mybatis_test?characterEncoding=utf8&useSSL=falseusername: root  #MySQL账号password: root  #MySQL密码driver-class-name: com.mysql.cj.jdbc.Drivermybatis:configuration: # 配置打印 MyBatis⽇志log-impl: org.apache.ibatis.logging.stdout.StdOutImplmap-underscore-to-camel-case: true #配置驼峰⾃动转换# 配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件mapper-locations: classpath:mapper/**Mapper.xml

2.2 Mybatis依赖和MySQL驱动依赖

		<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>annotationProcessor</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version><scope>provided</scope></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter-test</artifactId><version>2.2.2</version><scope>test</scope></dependency>

3. 实体类创建

实体类直接对应数据库表​​,主要用于​​数据持久化​​,与数据库交互。

在本项目中,实体类写在model文件夹中。

(1)BookInfo.java

@Data
public class BookInfo {private Integer id;private String bookName;private String author;private Integer count;//前端展示精度@JsonFormat(shape = JsonFormat.Shape.STRING )private BigDecimal price;private String publish;private Integer status; //1-可借阅,2-不可借阅 0-无效// 数据库中不存在的字段private String statusCN; // 可借阅,不可借阅 无效private Date createTime;private Date updateTime;}

(2)UserInfo.java


@Data
public class UserInfo {private Integer id;private String userName;private String password;private Integer deleteFlag;private Date CreateTime;private Date updateTime;
}

4. 项目介绍

(1)管理系统登录界面:
在这里插入图片描述
(2)图书管理界面
在这里插入图片描述

(3)添加图书界面
在这里插入图片描述

(4)修改图书界面

在这里插入图片描述
(5)批量删除界面
在这里插入图片描述

相关文章:

  • JVM——JVM是怎么实现invokedynamic的?
  • Go语言--语法基础4--基本数据类型--类型转换
  • 4个纯CSS自定义的简单而优雅的滚动条样式
  • 图片压缩与尺寸调整的便捷工具推荐
  • Qt输入控件(QInput Widgets)详解:从基础到实战
  • 【leetcode】队列 + 宽搜,树形结构层序遍历的基础与变化
  • 前端开发,文件在镜像服务器上不存在问题:Downloading binary from...Cannot download...
  • JAVA设计模式——(十)抽象工厂模式(Abstract Factory Pattern)
  • PostgreSQL 的 REINDEX 命令
  • LeetCode 2071 你可以安排的最多任务数目 题解(附带自己的错误做题思路 过了25/49)
  • 个人健康中枢的多元化AI网络革新与精准健康路径探析
  • 【数据结构】励志大厂版·初阶(复习+刷题)排序
  • linux 使用nginx部署ssl证书,将http升级为https
  • CF1000E We Need More Bosses
  • 什么是DGI数据治理框架?
  • 【Python】一直没搞懂生成器是什么。。
  • Fine Structure-Aware Sampling(AAAI 2024)论文笔记和启发
  • Milvus(13):自定义分析器、过滤器
  • Prompt compress 技术探究-LLMLingua
  • 【Linux】深入理解程序地址空间
  • 当AI开始谋财害命:从骗钱到卖假药,人类该如何防范?
  • 马斯克的“星舰基地”成为新城镇,首任市长为SpaceX员工
  • “五一”假期客流增加,多地提升铁路运力并强化服务
  • 10家A股农商行一季报:净利均实现增长,常熟银行营收、净利增速领跑
  • 五一假期天气将大转变,南方新一轮降雨来袭
  • 菏泽家长“付费查成绩”风波调查:免费功能被误读