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:
- Tổng quan về REST. Phần 1: REST là gì
- Tổng quan về REST. Phần 2: Giao tiếp giữa client và server
- Tổng quan về REST. Phần 3: Tạo RESTful Service trong Spring Boot
<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.sql và populateDB.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 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 1 và 2 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!
GO TO FULL VERSION