ฉันขอเริ่มด้วยการบอกว่าฉันชอบบทความชุดของElleanor Kerryที่เรียกว่า "ภาพรวม REST" มาก นี่คือลิงค์ไปยังบทความเหล่านี้:
- ภาพรวมของ REST ส่วนที่ 1: ส่วนที่เหลือคืออะไร
- ภาพรวมของ REST ส่วนที่ 2: การสื่อสารระหว่างไคลเอนต์และเซิร์ฟเวอร์
- ภาพรวมของ REST ส่วนที่ 3: การสร้างบริการ RESTful ใน Spring Boot
<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 แล้ว ไปที่โฟลเดอร์ทรัพยากรแล้วกรอก ไฟล์ 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.sqlและpopulateDB.sql คนแรกจะรับผิดชอบในการสร้างตาราง ส่วนคนที่สองจะรับผิดชอบในการกรอกข้อมูลในขั้นต้น มาเปิด initDB.sql กัน และดูแถบสีเขียวที่ด้านบนที่ระบุว่าไม่ได้กำหนดค่าภาษา SQL ซึ่งหมายความว่าเราไม่ได้เลือกภาษา SQL สำหรับโครงการของเรา (และมีหลายภาษา) คลิกทางด้านขวาของแถบเดียวกันบนคำจารึกเปลี่ยนภาษาเป็น... . ในหน้าต่างป๊อปอัป คลิกProject SQL Dialectและเนื่องจากฐานข้อมูลของเราคือPostgreSQLเราจึงเลือกภาษาถิ่นที่มีชื่อเดียวกัน คลิกตกลง ดำเนินการต่อเพื่อกรอกไฟล์.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
);
หลังจากกรอกไฟล์แล้ว หากคำอื่นที่ไม่ใช่ไคลเอ็นต์ เขียนด้วยแบบอักษรสีขาว ให้คลิกขวาที่ข้อความแล้วเลือก Change Dialect --> PostgreSQLอีกครั้ง ดังที่คุณคงเข้าใจแล้ว นี่เป็นข้อมูลเดียวกับที่เรากรอกเมื่อสร้างตารางทดสอบด้วยตนเอง ที่นี่จะมีการจัดรูปแบบในภาษา PostgreSQL ของภาษา SQL ตอนนี้เรามาเติม ไฟล์ 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
ในบรรทัดเหล่านี้ เราบอกว่าเราต้องการเริ่มต้นฐานข้อมูลโดยทางโปรแกรม และระบุว่าต้องใช้ไฟล์ใดในการดำเนินการนี้ จากนั้นไปที่ วิธีการ หลักของแอปพลิเคชันของเราแล้วเปิดใช้งาน . หลังจากนั้นไปที่pgAdmin --> Servers --> PostgreSQL 12 --> Databases --> customer --> 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: ข้อผิดพลาด: ค่าคีย์ที่ซ้ำกันละเมิดข้อจำกัดเฉพาะ "clients_pkey " สิ่งนี้เกิดขึ้นเนื่องจากเราได้กรอกข้อมูลในช่องที่มีรหัส 1และ2 ในตารางแล้ว (แม้ในช่วงการเปิดตัวครั้งแรก) ในตารางที่เราสร้างขึ้น ฟิลด์ idถูกระบุเป็นbigserialซึ่งสอดคล้องกับ ประเภท Longใน Java อย่างไรก็ตาม ในโปรแกรมของเรา ประเภทสำหรับฟิลด์นี้คือInteger ฉันตัดสินใจแสดงวิธีใช้ Long (BIGSERIAL) เนื่องจากมีช่วงที่ใหญ่กว่า Integer ความจริงก็คือในตาราง ฟิลด์ที่กำหนดให้เป็นคีย์หลักสามารถใช้ได้ไม่เพียงแต่ในการจัดเก็บรหัส ผู้ใช้ แต่ยังใช้ในการจัดเก็บดัชนีของข้อมูลที่หลากหลาย และจำนวนของบันทึกดังกล่าวอาจเกินค่าจำนวนเต็มสูงสุดได้ ตัวอย่างเช่น หากโปรแกรมของเราทำการวัดทุกๆ วินาทีและเขียนข้อมูลลงในตาราง เพื่อที่จะเขียนคลาสของเราใหม่เพื่อใช้ประเภทข้อมูลแบบยาว เราจำเป็นต้องเปลี่ยนประเภทจาก Integer เป็น Long ในทุกคลาสและวิธีการที่ใช้ฟิลด์id เราจะไม่ทำเช่นนี้เนื่องจากเดิมทีผู้เขียนเขียนโปรแกรมสำหรับ ประเภท 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
);
ที่นี่เราได้เปลี่ยน ประเภท รหัสเป็นSERIALซึ่งตรงกับ ประเภท จำนวนเต็มที่เราใช้สำหรับ ฟิลด์ รหัสในโปรแกรมของเรา นอกจากนี้ ความยาวสูงสุดของช่องโทรศัพท์ยังเพิ่มขึ้นเพื่อให้เราสามารถใช้ช่องว่างและอักขระพิเศษ (วงเล็บ ขีดกลาง ฯลฯ) ได้อย่างอิสระในการเขียน จำนวนหลักสูงสุดในหมายเลขโทรศัพท์ปัจจุบันคือ 18 หลัก (หากหน่วยความจำของฉันให้บริการอย่างถูกต้อง) ฉันตั้งค่าขนาดเป็น 50 ตัวอักษรเพื่อให้แน่ใจ ไปที่ไฟล์ application.properties และไม่ใส่เครื่องหมายข้อคิดเห็นบรรทัด:
spring.datasource.data=classpath*:database/populateDB.sql
มารันโปรแกรมของเรากัน ไปที่ pgAdmin ตรวจสอบว่าตารางของเราถูกสร้างขึ้นแล้ว และแสดงความคิดเห็นในบรรทัดนี้กลับ
#spring.datasource.data=classpath*:database/populateDB.sql
นี่คือที่ฉันอาจจะจบส่วนแรกของบทความ ฉันหวังว่าคุณจะชอบมัน เขียนความคิดเห็น (แม้ว่าคุณจะไม่ชอบก็ตาม) ในส่วนที่สอง เราจะเขียนคลาสของเราใหม่เพื่อให้สามารถทำงานกับฐานข้อมูลจริงได้ ความต่อเนื่อง: การเพิ่มฐานข้อมูล PostgreSQL ให้กับบริการ RESTful บน Spring Boot ส่วนที่ 2 UPD ขอขอบคุณผู้ดูแลสำหรับการแก้ไขรูปภาพและการจัดรูปแบบข้อความของฉัน!
GO TO FULL VERSION