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 创建数据库和表
sql
--创建数据库 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文件配置
yml
# 数据库连接配置
spring:
datasource:
# MySQL在远程服务器上
url: jdbc:mysql://x.x.x.x:3306/mybatis_test?characterEncoding=utf8&useSSL=false
username: root #MySQL账号
password: root #MySQL密码
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
configuration: # 配置打印 MyBatis⽇志
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true #配置驼峰⾃动转换
# 配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件
mapper-locations: classpath:mapper/**Mapper.xml
2.2 Mybatis依赖和MySQL驱动依赖
xml
<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
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
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)批量删除界面