JavaRush /Blog Java /Random-VI /Thêm cơ sở dữ liệu PostgreSQL vào dịch vụ RESTful trên Sp...
Artur
Mức độ
Tallinn

Thêm cơ sở dữ liệu PostgreSQL vào dịch vụ RESTful trên Spring Boot. Phần 1

Xuất bản trong nhóm
Hãy để tôi bắt đầu bằng cách nói rằng tôi thực sự thích loạt bài viết của Eleanor Kerry có tên “Tổng quan về REST”. Dưới đây là các liên kết đến các bài viết này: Thêm cơ sở dữ liệu PostgreSQL vào dịch vụ RESTful trên Spring Boot.  Phần 1 - 1Nói chung, tôi quyết định tận dụng sự tự do và thêm một chút vào chúng. Cụ thể là cho biết cách tạo cơ sở dữ liệu và kết nối nó với ứng dụng này. Nơi để bắt đầu? Có lẽ từ chính cơ sở dữ liệu. Tôi quyết định sử dụng PostgreSQL vì tôi thích giao diện quản trị thân thiện với người dùng của nó. Trước tiên, chúng ta cần tải xuống trình cài đặt PostgreSQL, ví dụ từ đây: Tải xuống cơ sở dữ liệu PostgreSQL Tôi sẽ không mô tả quá trình cài đặt hoàn chỉnh, bởi vì nó có thể thay đổi tùy thuộc vào hệ điều hành của bạn. Tuy nhiên, tôi lưu ý rằng trong quá trình này, bạn sẽ cần nhập mật khẩu quản trị viên cho vai trò (tài khoản) postgres mặc định và nhập mật khẩu đó 2 lần. Để đơn giản, tôi đặt mật khẩu là 123 . Tất nhiên, trong các dự án thực tế cần phải nghĩ ra thứ gì đó phức tạp hơn. Thêm cơ sở dữ liệu PostgreSQL vào dịch vụ RESTful trên Spring Boot.  Phần 1 - 2Tiếp theo, chương trình cài đặt sẽ nhắc bạn chọn một cổng; tôi để nó ở giá trị mặc định. Thêm cơ sở dữ liệu PostgreSQL vào dịch vụ RESTful trên Spring Boot.  Phần 1 - 3Ngôn ngữ cũng được để mặc định. Thêm cơ sở dữ liệu PostgreSQL vào dịch vụ RESTful trên Spring Boot.  Phần 1 - 4Cài đặt xong mở giao diện quản trị pgAdmin . Một trình duyệt sẽ mở ra với một cửa sổ bật lên, nơi chúng tôi sẽ được yêu cầu nhập mật khẩu đã tạo trước đó. Thêm cơ sở dữ liệu PostgreSQL vào dịch vụ RESTful trên Spring Boot.  Phần 1 - 5Bây giờ chúng ta cần thiết lập ngôn ngữ giao diện. Để thực hiện việc này, hãy nhấp vào Định cấu hình pgAdmin --> Khác --> Ngôn ngữ người dùng , chọn ngôn ngữ mong muốn --> Lưutải lại trang trình duyệt . Thêm cơ sở dữ liệu PostgreSQL vào dịch vụ RESTful trên Spring Boot.  Phần 1 - 6Ở góc trên bên trái của trang, nhấp vào Máy chủ , cửa sổ “ Kết nối với máy chủ ” xuất hiện . Nhập lại mật khẩu của chúng tôi và đánh dấu vào ô Lưu mật khẩu để không phải nhập mật khẩu lần nào. Thêm cơ sở dữ liệu PostgreSQL vào dịch vụ RESTful trên Spring Boot.  Phần 1 - 7Chúng tôi có thể tiếp tục sử dụng vai trò quản trị viên cho tất cả các cơ sở dữ liệu, nhưng sẽ tốt hơn nếu tạo một vai trò mới vì chúng tôi có thể có nhiều cơ sở dữ liệu và nhiều chương trình sử dụng chúng. Để thực hiện việc này, ở góc trên bên trái, nhấp vào PostgreSQL 12 --> RMB trên Đăng nhập/Vai trò nhóm --> Tạo --> Đăng nhập/Vai trò nhóm Thêm cơ sở dữ liệu PostgreSQL vào dịch vụ RESTful trên Spring Boot.  Phần 1 - 8 Trong cửa sổ bật lên, trên tab “ Chung ”, nhập tên của vai trò. Tôi đặt tên cho vai trò là root . Thêm cơ sở dữ liệu PostgreSQL vào dịch vụ RESTful trên Spring Boot.  Phần 1 - 9Trên tab “ Định nghĩa ” chúng tôi tạo một mật khẩu mới, tôi để lại 123 để không bị nhầm lẫn. Thêm cơ sở dữ liệu PostgreSQL vào dịch vụ RESTful trên Spring Boot.  Phần 1 - 10Chuyển đến tab “ Quyền ” và đánh dấu tất cả các mục cần thiết. Tôi đã đặt tất cả các mục thành " ". Nhấp vào “ LưuThêm cơ sở dữ liệu PostgreSQL vào dịch vụ RESTful trên Spring Boot.  Phần 1 - 11Chúng tôi tiến hành tạo cơ sở dữ liệu. Nhấp chuột phải vào “Cơ sở dữ liệu” --> Tạo --> Cơ sở dữ liệu Thêm cơ sở dữ liệu PostgreSQL vào dịch vụ RESTful trên Spring Boot.  Phần 1 - 12 Trên tab “ Chung ”, tạo tên của cơ sở dữ liệu. Hãy để nó là, ví dụ, khách hàng . Chúng tôi chỉ định chủ sở hữu cho root , người mà chúng tôi đã tạo ở bước trước. Thêm cơ sở dữ liệu PostgreSQL vào dịch vụ RESTful trên Spring Boot.  Phần 1 - 13Trên "Định nghĩa » kiểm tra xem chúng tôi đã đặt mã hóa thành UTF8 chưa . Nhấp vào để lưu ". Vậy là xong, cơ sở dữ liệu của chúng ta đã được tạo (hiện tại trống). Thêm cơ sở dữ liệu PostgreSQL vào dịch vụ RESTful trên Spring Boot.  Phần 1 - 14Tại thời điểm này chúng ta có thể kết thúc bằng pgAdmin, bởi vì... Chúng ta sẽ tạo bảng theo cách lập trình, tuy nhiên, để đề phòng, tôi sẽ chỉ cho bạn cách tạo bảng theo cách thủ công. Mở rộng khách hàng --> Lược đồ --> cây công khai . Nhấp chuột phải vào Bảng --> Tạo --> Bảng . Thêm cơ sở dữ liệu PostgreSQL vào dịch vụ RESTful trên Spring Boot.  Phần 1 - 15Một cửa sổ bật lên sẽ mở ra. Trên tab “ Chung ”, chúng tôi gán tên cho bảng của mình, ví dụ: test_table và gán root làm chủ sở hữu . Thêm cơ sở dữ liệu PostgreSQL vào dịch vụ RESTful trên Spring Boot.  Phần 1 - 16Chuyển đến tab “ Cột ”, nhấp vào “ + ” để tạo cột mới. Nhập tên “ id ” và kiểu dữ liệu bigserial , tương đương với kiểu Long trong Java nhưng có tính năng tự động tăng (khi thêm bản ghi mới, id sẽ tự động tăng thêm một). Chúng tôi đánh dấu không NULL là “ ”, khóa chính cũng là “ ”. Chúng ta tạo các cột “ tên ”, “ email ” và “ điện thoạiThêm cơ sở dữ liệu PostgreSQL vào dịch vụ RESTful trên Spring Boot.  Phần 1 - 17 ” theo cách tương tự . Chúng tôi chọn ký tự kiểu dữ liệu khác nhau , điều này tương ứng với kiểu Chuỗi , nhưng cho phép bạn đặt độ dài tối đa. Chúng tôi đặt độ dài tên tối đa là 200 ký tự để điền tên đầy đủ. trong một cột. Chúng tôi đặt độ dài email tối đa là 254 ký tự. Tại sao email có độ dài tối đa như vậy có thể tìm thấy ở đây . Đối với số điện thoại, hãy chọn 20 ký tự, thế là đủ. Một chút về số điện thoại: Quan niệm sai lầm của người lập trình về số điện thoại (Habr) Chúng tôi đánh dấu không NULL trong tất cả các cột là “ ” nếu chúng tôi muốn dữ liệu này là bắt buộc. Nhấp vào để lưu ". Vậy là bảng đã được tạo. Để xóa bảng kiểm tra của chúng tôi, hãy nhấp chuột phải vào bảng đó (trong cây) và “ xóa ”, bởi vì Chúng tôi không cần nó nữa vì chúng tôi sẽ tạo các bảng từ chương trình của mình. Đóng pgAdmin và đi đến chương trình của chúng tôi. Hãy mở IDEA với dự án của chúng ta. Nhấp vào Cơ sở dữ liệu ở cột bên phải của giao diện, nhấp vào “ + ” để thêm cơ sở dữ liệu của chúng tôi. Nguồn dữ liệu tiếp theo --> PostgreSQL . Trong cửa sổ bật lên, nhập vào trường Người dùng vai trò gốc mà chúng tôi đã tạo trước đó và mật khẩu của chúng tôiThêm cơ sở dữ liệu PostgreSQL vào dịch vụ RESTful trên Spring Boot.  Phần 1 - 18Thêm cơ sở dữ liệu PostgreSQL vào dịch vụ RESTful trên Spring Boot.  Phần 1 - 19123 trong trường mật khẩu . Trong trường Cơ sở dữ liệu , chúng tôi viết tên cơ sở dữ liệu khách hàng của mình . Chúng tôi nhấn nút Kiểm tra kết nối và nếu chúng tôi thấy dấu kiểm màu xanh lá cây bên dưới nó thì mọi thứ đã ổn và chúng tôi nhấn nút OK . Thêm cơ sở dữ liệu PostgreSQL vào dịch vụ RESTful trên Spring Boot.  Phần 1 - 20Vậy là chúng ta đã kết nối xong với cơ sở dữ liệu, bây giờ chúng ta hãy vào file pom.xml và thêm các phụ thuộc. Để làm việc với cơ sở dữ liệu ORM :
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Để tạo bộ điều khiển REST:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
Đối với máy chủ Tomcat:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
Đối với PostgreSQL:
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.2.10</version>
</dependency>
Bây giờ chúng ta đã sắp xếp xong pom.xml, hãy vào thư mục tài nguyên và điền vào tệp application.properties như sau:
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
Ở đây, chúng tôi đã nhập URL của cơ sở dữ liệu của mình, cung cấp thông tin đăng nhập và mật khẩu cho nó, đăng ký trình điều khiển cho PostgreSQL, cho biết rằng chúng tôi sẽ sử dụng kiểu dữ liệu PostgreSQL và chỉ định phương ngữ cho Hibernate. Tiếp theo, hãy tạo một thư mục mới có tên là cơ sở dữ liệu trong cùng thư mục tài nguyên . Trong thư mục này chúng ta sẽ tạo 2 file: initDB.sqlpopulateDB.sql . Người đầu tiên sẽ chịu trách nhiệm tạo bảng, người thứ hai sẽ chịu trách nhiệm điền chúng ban đầu. Hãy mở initDB.sql và thấy một thanh màu xanh lá cây ở trên cùng cho biết phương ngữ SQL chưa được cấu hình . Điều này có nghĩa là chúng tôi chưa chọn phương ngữ SQL cho dự án của mình (và có một số phương ngữ trong số đó). Nhấp vào phía bên phải của cùng một dải trên dòng chữ Thay đổi phương ngữ thành… . Trong cửa sổ bật lên, hãy nhấp vào Project SQL Dialect và vì cơ sở dữ liệu của chúng tôi là PostgreSQL , nên chúng tôi chọn phương ngữ có cùng tên. Nhấn OK Thêm cơ sở dữ liệu PostgreSQL vào dịch vụ RESTful trên Spring Boot.  Phần 1 - 21 Hãy chuyển sang phần điền vào các tệp .sql của chúng ta . Trước tiên chúng ta hãy điền vào tệp 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
);
Nếu sau khi điền vào tệp, một số từ không phải máy khách được viết bằng phông chữ màu trắng, thì hãy nhấp chuột phải vào bên trong văn bản và chọn Change Dialect --> PostgreSQL lần nữa . Như bạn có thể đã hiểu, đây chính là dữ liệu mà chúng tôi đã điền khi tạo bảng kiểm tra theo cách thủ công. Ở đây chúng được định dạng theo phương ngữ PostgreSQL của ngôn ngữ SQL. Bây giờ hãy điền vào tệp 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)');
Nếu tên bảng client của bạn được viết bằng chữ màu đỏ thì không sao. Vấn đề là chúng tôi chưa tạo bảng này và IDEA chưa nhận ra nó. Để tạo và điền vào bảng, chúng ta cần quay lại tệp application.properties và thêm ba dòng sau vào đó:
spring.datasource.initialization-mode=ALWAYS
spring.datasource.schema=classpath*:database/initDB.sql
spring.datasource.data=classpath*:database/populateDB.sql
Trong những dòng này, chúng tôi nói rằng chúng tôi muốn khởi tạo cơ sở dữ liệu theo chương trình và cho biết tệp nào cần được sử dụng cho việc này. Tiếp theo, đi đến phương thức chính của ứng dụng của chúng tôi và khởi chạy nó . Sau đó, đi tới pgAdmin --> Servers --> PostgreSQL 12 --> Databases --> customer --> Schemas --> public , nhấp chuột phải vào " Tables ", " Update ". Nếu mọi việc suôn sẻ thì chúng ta sẽ thấy bảng client mà chúng ta đã tạo . Sau đó, quay lại tệp application.properties và nhận xét dòng đó.
spring.datasource.data=classpath*:database/populateDB.sql
như sau:
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
Nếu chúng tôi không làm điều này, thì lần tiếp theo khi chạy chương trình, chúng tôi sẽ nhận được lỗi sau: org.postgresql.util.PSQLException: ERROR: Một giá trị khóa trùng lặp vi phạm ràng buộc duy nhất "clients_pkey" . Điều này xảy ra vì chúng tôi đã điền vào các trường có id 12 trong bảng (ngay cả trong lần khởi chạy đầu tiên). Trong bảng chúng tôi đã tạo, trường id được chỉ định là bigserial , tương ứng với loại Long trong Java. Tuy nhiên, trong chương trình của chúng tôi, loại cho trường này là Integer . Tôi quyết định trình bày cách sử dụng Long (BIGSERIAL) vì nó có phạm vi lớn hơn Integer. Thực tế là trong các bảng, trường được chỉ định là Khóa chính không chỉ có thể được sử dụng để lưu trữ id người dùng mà còn để lưu trữ chỉ mục của nhiều loại dữ liệu và số lượng bản ghi như vậy có thể vượt quá giá trị Số nguyên tối đa. Ví dụ: nếu chương trình của chúng tôi thực hiện một số phép đo mỗi giây và ghi dữ liệu vào bảng. Để viết lại các lớp của chúng ta để sử dụng kiểu dữ liệu Long, chúng ta cần thay đổi kiểu từ Integer thành Long trong tất cả các lớp và phương thức sử dụng trường id . Chúng tôi sẽ không làm điều này, vì chương trình ban đầu được tác giả viết cho kiểu id Integer, điều đó có nghĩa là điều này có ý nghĩa nào đó. Để tiếp tục, một lần nữa hãy xóa bảng client mà chúng ta đã tạo khỏi cơ sở dữ liệu của mình, nhưng bây giờ chúng ta sẽ cố gắng thực hiện việc đó theo chương trình thay vì thủ công. Để thực hiện việc này, hãy nhận xét mã của chúng tôi trong tệp initDB.sql và thêm một dòng:
-- 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
Hãy khởi chạy chương trình, truy cập pgAdmin , nhấp chuột phải vào “ Tables ” (trong cơ sở dữ liệu khách hàng của chúng tôi ) - ->Update ”, và chúng ta sẽ thấy bảng của mình đã biến mất. NB! Hãy cẩn thận khi sử dụng lệnh này, nếu không bạn có nguy cơ mất tất cả dữ liệu có trong bảng của mình! Chúng ta quay lại file initDB.sql và viết lại như sau:
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
);
Ở đây chúng tôi đã thay đổi loại id thành SERIAL , khớp với loại Số nguyên mà chúng tôi đang sử dụng cho trường id trong chương trình của mình. Ngoài ra, độ dài tối đa của trường điện thoại đã được tăng lên để chúng ta có thể thoải mái sử dụng khoảng trắng và các ký tự đặc biệt (dấu ngoặc đơn, dấu gạch ngang, v.v.) trong văn bản của nó. Số chữ số tối đa trong một số điện thoại hiện là 18 chữ số (nếu trí nhớ của tôi phục vụ chính xác). Tôi đặt kích thước thành 50 ký tự để chắc chắn. Chúng ta hãy đi tới tệp application.properties và bỏ ghi chú dòng:
spring.datasource.data=classpath*:database/populateDB.sql
Hãy chạy chương trình của chúng tôi, truy cập pgAdmin, kiểm tra xem bảng của chúng tôi đã được tạo chưa và nhận xét lại dòng này.
#spring.datasource.data=classpath*:database/populateDB.sql
Đây có lẽ là nơi tôi sẽ kết thúc phần đầu tiên của bài viết. Tôi hy vọng bạn thích nó, viết bình luận (ngay cả khi bạn không thích nó). Trong phần hai, chúng ta sẽ viết lại các lớp của mình để chúng có thể hoạt động với cơ sở dữ liệu thực. Tiếp tục: Thêm cơ sở dữ liệu PostgreSQL vào dịch vụ RESTful trên Spring Boot. Phần 2 CẬP NHẬT Cảm ơn người điều hành đã sửa hình ảnh và định dạng văn bản của tôi!
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION