JavaRush /Java 博客 /Random-ZH /将 PostgreSQL 数据库添加到 Spring Boot 上的 RESTful 服务。第1部分
Artur
第 40 级
Tallinn

将 PostgreSQL 数据库添加到 Spring Boot 上的 RESTful 服务。第1部分

已在 Random-ZH 群组中发布
首先我要说的是,我非常喜欢Eleanor Kerry 撰写的名为“REST 概述”的系列文章。以下是这些文章的链接: 将 PostgreSQL 数据库添加到 Spring Boot 上的 RESTful 服务。 第 1 - 1 部分总的来说,我决定冒昧地给它们添加一点内容。即,讲述如何创建数据库并将其连接到该应用程序。从哪里开始?可能来自数据库本身。我决定使用PostgreSQL,因为我喜欢它用户友好的管理界面。首先,我们需要下载 PostgreSQL 安装程序,例如从这里:PostgreSQL 数据库下载 我不会描述完整的安装过程,因为 它可能会根据您的操作系统而有所不同。不过,我注意到,在此过程中,您需要为默认的postgres角色(帐户)提供管理员密码并输入两次。为了简单起见,我将密码设置为 123。当然,在实际项目中,有必要想出更复杂的东西。 将 PostgreSQL 数据库添加到 Spring Boot 上的 RESTful 服务。 第 1 - 2 部分接下来,安装程序会提示您选择一个端口;我将其保留为默认值。 将 PostgreSQL 数据库添加到 Spring Boot 上的 RESTful 服务。 第 1 - 3 部分区域设置也保留为默认值。 将 PostgreSQL 数据库添加到 Spring Boot 上的 RESTful 服务。 第 1 - 4 部分安装完毕,然后打开管理员界面pgAdmin。浏览器将打开一个弹出窗口,要求我们输入之前创建的密码。 将 PostgreSQL 数据库添加到 Spring Boot 上的 RESTful 服务。 第 1 - 5 部分现在我们需要设置界面语言。为此,请单击配置 pgAdmin --> 其他 --> 用户语言,选择所需的语言--> 保存,然后重新加载浏览器页面将 PostgreSQL 数据库添加到 Spring Boot 上的 RESTful 服务。 第 1 - 6 部分在页面左上角,单击“服务器” ,出现“连接服务器”窗口。再次输入我们的密码并选中“保存密码”框,以免每次都输入它。 将 PostgreSQL 数据库添加到 Spring Boot 上的 RESTful 服务。 第 1 - 7 部分我们可以继续对所有数据库使用管理员角色,但最好创建一个新角色,因为我们可能有许多数据库和许多使用它们的程序。为此,请在左上角单击PostgreSQL 12 -->登录/组角色上的人民币--> 创建 --> 登录/组角色 将 PostgreSQL 数据库添加到 Spring Boot 上的 RESTful 服务。 第 1 - 8 部分在弹出窗口中的“常规”选项卡上,输入角色的名称。我将该角色命名为root将 PostgreSQL 数据库添加到 Spring Boot 上的 RESTful 服务。 第 1 - 9 部分在“定义”选项卡上,我们创建一个新密码,我留下了123,以免混淆。 将 PostgreSQL 数据库添加到 Spring Boot 上的 RESTful 服务。 第 1 - 10 部分转到“权限”选项卡并标记所有必要的项目。我已将所有项目设置为“”。单击“保存将 PostgreSQL 数据库添加到 Spring Boot 上的 RESTful 服务。 第 1 - 11 部分我们继续创建数据库。右键单击“数据库” --> 创建 --> 数据库 将 PostgreSQL 数据库添加到 Spring Boot 上的 RESTful 服务。 第 1 - 12 部分在“常规”选项卡上,创建数据库的名称。比如说,客户。我们将所有者分配给我们在上一步中创建的 root 。将 PostgreSQL 数据库添加到 Spring Boot 上的 RESTful 服务。 第 1 - 13 部分论“定义» 检查我们是否将编码设置为UTF8。单击“保存”。就这样,我们的数据库已创建(目前为空)。 将 PostgreSQL 数据库添加到 Spring Boot 上的 RESTful 服务。 第 1 - 14 部分此时我们可以以 pgAdmin 结束,因为...... 我们将以编程方式创建表,但为了以防万一,我将向您展示如何手动创建表。展开客户 --> 模式 --> 公共树。右键单击表 --> 创建 --> 表将 PostgreSQL 数据库添加到 Spring Boot 上的 RESTful 服务。 第 1 - 15 部分将打开一个弹出窗口。在“常规”选项卡上,我们为表指定一个名称,例如test_table,并将root指定为所有者。 将 PostgreSQL 数据库添加到 Spring Boot 上的 RESTful 服务。 第 1 - 16 部分转到“”选项卡,单击“ + ”创建新列。输入名称“ id ”和数据类型bigserial,相当于Java中的Long类型,但具有自动递增功能(添加新记录时,id会自动加一)。 我们将非NULL标记为“”,主键也是“”。 将 PostgreSQL 数据库添加到 Spring Boot 上的 RESTful 服务。 第 1 - 17 部分我们以同样的方式创建“姓名”、“电子邮件”和“电话”列。我们选择数据类型charactervarying,这对应于String类型,但是允许设置最大长度。我们将最大名称长度设置为200 个字符来填写全名。在一列中。我们将最大电子邮件长度设置为254 个字符。为什么电子邮件有这样的最大长度可以在这里找到。对于电话号码,选择20 个字符,这应该足够了。关于电话号码的一些知识:程序员对电话号码的误解(Habr) 如果我们希望此数据是强制性的,我们将所有列中的非 NULL标记为“是”。单击“保存”。就是这样,表已经创建了。 将 PostgreSQL 数据库添加到 Spring Boot 上的 RESTful 服务。 第 1 - 18 部分要删除我们的测试表,请右键单击它(在树中)并“删除”,因为 我们不再需要它,因为我们将从我们的程序中创建表。关闭pgAdmin并转到我们的程序。让我们用我们的项目打开 IDEA。点击界面右栏的数据库,点击“ + ”添加我们的数据库。下一个数据源 --> PostgreSQL将 PostgreSQL 数据库添加到 Spring Boot 上的 RESTful 服务。 第 1 - 19 部分在弹出窗口中,在用户字段中输入我们之前创建的root角色和密码密码字段中为123。在数据库字段中,我们写入客户数据库的名称。我们按下“测试连接”按钮,如果我们看到其下方有一个绿色复选标记,则一切正常,然后按下“确定”按钮。 将 PostgreSQL 数据库添加到 Spring Boot 上的 RESTful 服务。 第 1 - 20 部分就这样,我们已经连接到了数据库,现在让我们转到pom.xml文件并添加依赖项。 使用 ORM 数据库
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
要创建 REST 控制器:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
对于 Tomcat 服务器:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
对于 PostgreSQL:
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.2.10</version>
</dependency>
现在我们已经整理好了pom.xml,我们进入resources文件夹,填写application.properties文件,如下:
spring.datasource.url=jdbc:postgresql://localhost:5432/customers
spring.datasource.username=root
spring.datasource.password=123

spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.database=postgresql
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQL10Dialect
在这里,我们输入数据库的 URL,提供数据库的登录名和密码,注册 PostgreSQL 的驱动程序,指示我们将使用 PostgreSQL 数据类型,并指定 Hibernate 的方言。接下来,让我们在同一资源文件夹中创建一个名为“数据库”的新目录。在此目录中,我们将创建 2 个文件:initDB.sqlpopulateDB.sql。第一个将负责创建表,第二个将负责最初填充它们。让我们打开 initDB.sql并看到顶部有一个绿色条,上面写着SQL dialect is not generated。这意味着我们还没有为我们的项目选择 SQL 方言(并且有多种方言)。单击铭文上同一条带的右侧将方言更改为...。在弹出的窗口中,单击Project SQL Dialect,由于我们的数据库是PostgreSQL,所以我们选择同名的方言。单击“确定” 将 PostgreSQL 数据库添加到 Spring Boot 上的 RESTful 服务。 第 1 - 21 部分让我们继续填写.sql文件。我们首先填写initDB.sql文件:
CREATE TABLE IF NOT EXISTS clients
(
    id    BIGSERIAL PRIMARY KEY ,
    name  VARCHAR(200) NOT NULL ,
    email VARCHAR(254) NOT NULL ,
    phone VARCHAR(20)  NOT NULL
);
如果填写文件后,除客户端以外的一些文字都是白色字体,则在文本内部右键单击,然后再次选择更改方言 --> PostgreSQL。您可能已经了解,这与我们手动创建测试表时填写的数据相同。这里它们被格式化为 SQL 语言的 PostgreSQL 方言。现在让我们填写populateDB.sql文件:
INSERT INTO clients VALUES
(1, 'Vassily Petrov', 'vpetrov@jr.com', '+7 (191) 322-22-33)'),
(2, 'Pjotr Vasechkin', 'pvasechkin@jr.com', '+7 (191) 223-33-22)');
如果你的客户表 的名字是用红色字母写的,那就没问题。问题是,我们还没有创建这个表,IDEA 还不能识别它。为了创建和填充表,我们需要返回application.properties文件并在其中添加以下三行:
spring.datasource.initialization-mode=ALWAYS
spring.datasource.schema=classpath*:database/initDB.sql
spring.datasource.data=classpath*:database/populateDB.sql
在这些行中,我们说我们希望以编程方式初始化数据库,并指出为此需要使用哪些文件。接下来,转到我们应用程序的main方法并启动它。之后,转到pgAdmin --> Servers --> PostgreSQL 12 --> Databases -->customers --> Schemas --> public,右键单击“ Tables ”、“ Update ”。如果一切顺利,那么我们会看到我们创建的客户表。之后,返回application.properties文件并注释掉该行。
spring.datasource.data=classpath*:database/populateDB.sql
如下:
spring.datasource.url=jdbc:postgresql://localhost:5432/customers
spring.datasource.username=root
spring.datasource.password=123

spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.database=postgresql
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQL10Dialect

spring.datasource.initialization-mode=ALWAYS
spring.datasource.schema=classpath*:database/initDB.sql
#spring.datasource.data=classpath*:database/populateDB.sql
如果我们不这样做,那么下次运行该程序时,我们将收到以下错误:org.postgresql.util.PSQLException: ERROR: A重复的键值违反了唯一约束“clients_pkey”发生这种情况是因为我们已经在表中填写了id 12的字段(即使在第一次启动期间也是如此)。在我们创建的表中,id字段指定为bigserial,对应Java中的Long类型。然而,在我们的程序中,该字段的类型是Integer。我决定展示如何使用 Long (BIGSERIAL),因为它的范围比 Integer 更大。事实上,在表中,指定为 Primary Key 的字段不仅可以用来存储用户ID,还可以用来存储各种数据的索引,并且此类记录的数量可以超过最大 Integer 值。例如,如果我们的程序每秒进行一些测量并将数据写入表中。为了重写我们的类以使用 Long 数据类型,我们需要在所有使用id字段的类和方法中将类型从 Integer 更改为 Long 。我们不会这样做,因为该程序最初是作者为id Integer 类型编写的,这意味着这是有一定道理的。要继续,让我们再次从数据库中删除我们创建的客户表,但现在我们将尝试以编程方式而不是手动执行此操作。为此,请注释掉initDB.sql文件中的代码并添加一行:
-- CREATE TABLE IF NOT EXISTS clients
-- (
--     id    BIGSERIAL PRIMARY KEY ,
--     name  VARCHAR(200) NOT NULL ,
--     email VARCHAR(254) NOT NULL ,
--     phone VARCHAR(20)  NOT NULL
-- );
DROP TABLE IF EXISTS clients
让我们启动程序,转到pgAdmin,右键单击“ Tables ”(在我们的客户数据库中)-->Update ”,我们将看到我们的表已经消失了。 注意!使用此命令时要小心,否则您可能会丢失表中的所有数据!我们回到initDB.sql文件,重写如下:
CREATE TABLE IF NOT EXISTS clients
(
    id    SERIAL PRIMARY KEY ,
    name  VARCHAR(200) NOT NULL ,
    email VARCHAR(254) NOT NULL ,
    phone VARCHAR(50)  NOT NULL
);
这里我们将id类型 更改为SERIAL,它与我们在程序中用于id字段的Integer类型相匹配。此外,电话字段的最大长度已增加,以便我们可以在其书写中自由使用空格和特殊字符(括号、破折号等)。目前,电话号码的最大位数为 18 位(如果我没记错的话)。为了确定起见,我将大小设置为 50 个字符。让我们转到 application.properties 文件并取消注释该行:
spring.datasource.data=classpath*:database/populateDB.sql
让我们运行我们的程序,转到 pgAdmin,检查我们的表是否已创建,然后注释掉这一行。
#spring.datasource.data=classpath*:database/populateDB.sql
我可能会在这里完成本文的第一部分。我希望你喜欢它,写评论(即使你不喜欢它)。在第二部分中,我们将重写我们的类,以便它们可以使用真实的数据库。继续: 将 PostgreSQL 数据库添加到 Spring Boot 上的 RESTful 服务。Part 2 UPD 感谢版主纠正我的图片和文字格式!
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION