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

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)批量删除界面

相关推荐
葫芦和十三8 小时前
图解 MongoDB 21|选举与 failover:Primary 是怎么选出来的
后端·mongodb·agent
GetcharZp8 小时前
26k Star 开源内网穿透神器 NetBird,一分钟实现全球设备互联!
后端
考虑考虑9 小时前
Mybatis实现批量插入
java·后端·mybatis
咖啡八杯9 小时前
GoF设计模式——中介者模式
java·后端·spring·设计模式
lizhongxuan12 小时前
多Agent之间的区别
后端
青石路13 小时前
记一次多JDK版本问题的排查,一坑套一坑,差点没爬上来
java
杨充14 小时前
1.面向对象设计思想
后端
IT_陈寒14 小时前
Java的Date类又坑了我一次,改用时间戳真香
前端·人工智能·后端
systemPro15 小时前
2.6亿条设备数据,历史查询从超时到50ms,我做了什么
后端
要阿尔卑斯吗15 小时前
提示词优化启示:为什么“按顺序输出“比“关键度评分“更有效
后端