JavaRush /Java Blog /Random-TW /將 PostgreSQL 資料庫新增至 Spring Boot 上的 RESTful 服務。第1部分
Artur
等級 40
Tallinn

將 PostgreSQL 資料庫新增至 Spring Boot 上的 RESTful 服務。第1部分

在 Random-TW 群組發布
首先我要說的是,我非常喜歡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,並將r​​oot指定為擁有者。 將 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