图书管理系统框架设计

了解了图书管理系统需求之后,针对系统需求分析,我们需要对系统进行设计。具体的有数据库设计,指定在系统中使用的字段;接口设计,指定接口访问路径。

在本章节中,将会针对系统需求分析,进行系统设计,并搭建框架,为系统开发准备好环境。

数据库设计

同样的是,我们使用一个简化的数据表来介绍功能。首先,需要书籍ID、书籍的英文名称、书籍的中文名称、借阅书籍的数量、借阅的开始时间(这个用于借阅时间的延期)等字段。

表名:broowing 表信息。需要的字段、类型、字段长度如表17.1所示。

image 2024 04 01 16 01 03 597
Figure 1. 表17.1 broowing表信息

主键:uuid。SQL语句如下。

create table broowing(
   uuid int(32) not null,
   book_ename VARCHAR(32),
   book_cname VARCHAR(32),
   book_quantity VARCHAR(32),
   start_time DATE,
   end_time DATE,
   primary key(uuid)
)engine=INNODB DEFAULT CHARSET=utf8;

接口设计

通过前面的需求分析,系统存在下面几个接口。

(1)查看借阅的图书接口

  • /book/queryAllBook。

  • /book/queryOne。

(2)借阅图书

在写接口时,需要存在两个接口做辅助,第一个接口可以查询到所有的图书,第二个接口可以根据条件查询特殊的图书。然后,对选择的图书进行借阅。

  • /broow/brrowBook。这里考虑后者,因此只用写最后一个接口。

(3)归还图书

  • /broow/returnBook。

(4)图书续借

  • /broow/renewBook。

环境搭建

在本案例中,只讲学生端的借阅。因此,我们只需要搭建两个模块即可,其一是注册中心,其二是借阅模块。

(1)模块说明

在本案例中,没有采用配置中心,在第 16 章中使用过,这里不再重复介绍;关于高可用,可以在配置的时候修改一下配置项,使得系统高可用;同时,关于路由或者负载均衡,可以选择性地添加组件。因此,模块部署如图17.1所示。

image 2024 04 01 16 04 11 178
Figure 2. 图17.1 模块部署

(2)注册中心的搭建

首先,我们新建一个名称为 libaray Center 的项目,如图17.2所示。

image 2024 04 01 16 04 51 746
Figure 3. 图17.2 新建libaray Center项目

在 pom 文件中添加依赖,代码如下所示。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.4.RELEASE</version>
    <relativePath/><!-- lookup parent from repository -->
</parent>
<properties>
    <java.version>1.8</java.version>
    <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

配置文件的代码如下所示。

server.port=8764
eureka.client.service-url.defaultZone=http://localhost:8764/eureka/
eureka.client.register-with-eureka=false
eureka.server.enable-self-preservation=false

最后,启动应用,效果如图17.3所示。

image 2024 04 01 16 06 17 660
Figure 4. 图17.3 启动应用

(3)借阅模块的搭建

新建一个名称为 brrow 的项目,用于学生借阅图书的模块,如图17.4所示。

image 2024 04 01 16 06 56 131
Figure 5. 图17.4 新建brrow项目

添加依赖,代码如下所示。

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
</dependencies>

然后,添加配置文件,代码如下所示。

server.port=8091
spring.application.name=brrowService
eureka.client.service-url.defaultZone=http://localhost:8764/eureka/
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3308/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.maximum-pool-size=15
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-name=DatebookHikariCP
spring.datasource.hikari.max-lifetime=1800000
spring.datasource.hikari.connection-timeout=30000
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jmx.enable=false