JavaRush /จาวาบล็อก /Random-TH /การเพิ่มฐานข้อมูล PostgreSQL ให้กับบริการ RESTful บน Spri...
Artur
ระดับ
Tallinn

การเพิ่มฐานข้อมูล PostgreSQL ให้กับบริการ RESTful บน Spring Boot ส่วนที่ 1

เผยแพร่ในกลุ่ม
ฉันขอเริ่มด้วยการบอกว่าฉันชอบบทความชุดของElleanor Kerryที่เรียกว่า "ภาพรวม REST" มาก นี่คือลิงค์ไปยังบทความเหล่านี้: การเพิ่มฐานข้อมูล PostgreSQL ให้กับบริการ RESTful บน Spring Boot  ตอนที่ 1 - 1โดยทั่วไปฉันตัดสินใจที่จะใช้เสรีภาพและเพิ่มเข้าไปเล็กน้อย กล่าวคือบอกวิธีสร้างฐานข้อมูลและเชื่อมต่อกับแอปพลิเคชันนี้ จะเริ่มต้นที่ไหน? อาจมาจากฐานข้อมูลนั่นเอง ฉันตัดสินใจใช้PostgreSQLเพราะฉันชอบอินเทอร์เฟซผู้ดูแลระบบที่ใช้งานง่าย ขั้นแรกเราต้องดาวน์โหลดตัวติดตั้ง PostgreSQL จากที่นี่: ดาวน์โหลดฐานข้อมูล PostgreSQL ฉันจะไม่อธิบายกระบวนการติดตั้งทั้งหมดเพราะ มันอาจแตกต่างกันไปขึ้นอยู่กับระบบปฏิบัติการของคุณ อย่างไรก็ตาม ฉันทราบว่าในกระบวนการนี้ คุณจะต้องสร้างรหัสผ่านผู้ดูแลระบบสำหรับบทบาท postgres เริ่มต้น (บัญชี) และป้อนรหัสผ่าน 2 ครั้ง เพื่อความง่าย ฉันตั้งรหัสผ่านเป็น 123 แน่นอนว่าในโครงการจริงจำเป็นต้องมีสิ่งที่ซับซ้อนกว่านี้เกิดขึ้น การเพิ่มฐานข้อมูล PostgreSQL ให้กับบริการ RESTful บน Spring Boot  ส่วนที่ 1 - 2จากนั้นโปรแกรมติดตั้งจะแจ้งให้คุณเลือกพอร์ต ฉันปล่อยให้เป็นค่าเริ่มต้น การเพิ่มฐานข้อมูล PostgreSQL ให้กับบริการ RESTful บน Spring Boot  ส่วนที่ 1 - 3Localeก็ถูกปล่อยให้เป็นค่าเริ่มต้นเช่นกัน การเพิ่มฐานข้อมูล PostgreSQL ให้กับบริการ RESTful บน Spring Boot  ส่วนที่ 1 - 4ติดตั้งแล้วเปิดอินเทอร์เฟซผู้ดูแลระบบpgAdmin เบราว์เซอร์จะเปิดขึ้นพร้อมหน้าต่างป๊อปอัปซึ่งเราจะถูกขอให้ป้อนรหัสผ่านที่สร้างไว้ก่อนหน้านี้ การเพิ่มฐานข้อมูล PostgreSQL ให้กับบริการ RESTful บน Spring Boot  ส่วนที่ 1 - 5ตอนนี้เราต้องตั้งค่าภาษาอินเทอร์เฟซ ในการดำเนินการนี้ ให้คลิกConfigure pgAdmin --> Miscellaneous --> User Languageเลือกภาษาที่ต้องการ--> Saveและโหลดหน้าเบราว์เซอร์อีกครั้ง การเพิ่มฐานข้อมูล PostgreSQL ให้กับบริการ RESTful บน Spring Boot  ส่วนที่ 1 - 6ที่มุมซ้ายบนของหน้า ให้คลิกเซิร์ฟเวอร์หน้าต่าง " เชื่อมต่อกับเซิร์ฟเวอร์ " จะปรากฏ ขึ้น ป้อนรหัสผ่านของเราอีกครั้งและทำเครื่องหมายที่ช่องบันทึกรหัสผ่านเพื่อไม่ให้ป้อนทุกครั้ง การเพิ่มฐานข้อมูล PostgreSQL ให้กับบริการ RESTful บน Spring Boot  ตอนที่ 1 - 7เราสามารถใช้บทบาทผู้ดูแลระบบกับฐานข้อมูลทั้งหมดต่อไปได้ แต่จะดีกว่าถ้าสร้างบทบาทใหม่เพราะเราอาจมีหลายฐานข้อมูลและหลายโปรแกรมที่ใช้งาน ในการดำเนินการนี้ ที่มุมซ้ายบน ให้คลิกที่PostgreSQL 12 --> RMB บนบทบาทการเข้าสู่ระบบ/กลุ่ม --> สร้าง --> บทบาทการเข้าสู่ระบบ/กลุ่ม การเพิ่มฐานข้อมูล PostgreSQL ให้กับบริการ RESTful บน Spring Boot  ส่วนที่ 1 - 8ในหน้าต่างป๊อปอัป บนแท็บ " ทั่วไป " ให้ป้อน ชื่อของบทบาท ฉัน ตั้งชื่อบทบาทroot การเพิ่มฐานข้อมูล PostgreSQL ให้กับบริการ RESTful บน Spring Boot  ส่วนที่ 1 - 9ในแท็บ " คำจำกัดความ " เราสร้างรหัสผ่านใหม่ ฉันเหลือ123ไว้เพื่อไม่ให้สับสน การเพิ่มฐานข้อมูล PostgreSQL ให้กับบริการ RESTful บน Spring Boot  ส่วนที่ 1 - 10ไปที่แท็บ " สิทธิ์ " และทำเครื่องหมายรายการที่จำเป็นทั้งหมด ฉันได้ตั้งค่ารายการทั้งหมดเป็น " ใช่ " คลิก " บันทึก " การเพิ่มฐานข้อมูล PostgreSQL ให้กับบริการ RESTful บน Spring Boot  ส่วนที่ 1 - 11เราดำเนินการสร้างฐานข้อมูลต่อไป คลิกขวาที่“ฐานข้อมูล” --> สร้าง --> ฐานข้อมูล การเพิ่มฐานข้อมูล PostgreSQL ให้กับบริการ RESTful บน Spring Boot  ส่วนที่ 1 - 12บนแท็บ “ ทั่วไป ” สร้างชื่อของฐานข้อมูล ปล่อยให้ มันเป็นเช่นลูกค้า เรามอบหมายให้เจ้าของรูทซึ่งเราสร้างขึ้นในขั้นตอนก่อนหน้า การเพิ่มฐานข้อมูล PostgreSQL ให้กับบริการ RESTful บน Spring Boot  ส่วนที่ 1 - 13บน "คำจำกัดความ » ตรวจสอบว่าเรามีชุด การเข้ารหัส UTF8 คลิก " บันทึก " เพียงเท่านี้ ฐานข้อมูลของเราก็ได้ถูกสร้างขึ้นแล้ว (ขณะนี้ว่างเปล่า) การเพิ่มฐานข้อมูล PostgreSQL ให้กับบริการ RESTful บน Spring Boot  ตอนที่ 1 - 14ณ จุดนี้ เราอาจปิดท้ายด้วย pgAdmin เพราะ... เราจะสร้างตารางโดยทางโปรแกรม แต่ในกรณีนี้ ฉันจะแสดงวิธีสร้างตารางด้วยตนเอง ขยายลูกค้า --> Schemas --> แผนผัง สาธารณะ คลิกขวาที่Tables --> Create --> Table การเพิ่มฐานข้อมูล PostgreSQL ให้กับบริการ RESTful บน Spring Boot  ส่วนที่ 1 - 15หน้าต่างป๊อปอัปจะเปิดขึ้น บนแท็บ " ทั่วไป " เรากำหนดชื่อให้กับตารางของเรา เช่นtest_tableและกำหนดroot เป็น เจ้าของ การเพิ่มฐานข้อมูล PostgreSQL ให้กับบริการ RESTful บน Spring Boot  ตอนที่ 1 - 16ไปที่แท็บ " คอลัมน์ " คลิกที่ " + " เพื่อสร้างคอลัมน์ใหม่ ป้อนชื่อ “ id ” และประเภทข้อมูลbigserialซึ่งเทียบเท่ากับ ประเภท Longใน Java แต่มีการเพิ่มขึ้นอัตโนมัติ (เมื่อเพิ่มบันทึกใหม่idจะเพิ่มขึ้นทีละหนึ่งโดยอัตโนมัติ) เราทำเครื่องหมายว่า non-NULLเป็น " ใช่ " คีย์หลักก็คือ " ใช่ " เราสร้างคอลัมน์ " ชื่อ " , " อีเมล " และ " โทรศัพท์การเพิ่มฐานข้อมูล PostgreSQL ให้กับบริการ RESTful บน Spring Boot  ส่วนที่ 1 - 17 " ในลักษณะเดียวกัน เราเลือกอักขระประเภทข้อมูลที่แตกต่างกันซึ่งสอดคล้องกับ ประเภท Stringแต่อนุญาตให้คุณกำหนดความยาวสูงสุดได้ เราตั้งค่าความยาวชื่อสูงสุดไว้ที่200ตัวอักษรเพื่อกรอกชื่อเต็ม ในหนึ่งคอลัมน์ เรากำหนด ความยาวอีเมล สูงสุด ไว้ที่254ตัวอักษร เหตุใดอีเมลจึงมีความ ยาวสูงสุด สามารถพบได้ที่นี่ สำหรับหมายเลขโทรศัพท์ ให้เลือก20ตัวอักษร ซึ่งก็น่าจะเพียงพอแล้ว เล็กน้อยเกี่ยวกับหมายเลขโทรศัพท์: ความเข้าใจผิดของโปรแกรมเมอร์เกี่ยวกับหมายเลขโทรศัพท์ (Habr) เราทำเครื่องหมาย ว่าไม่เป็น NULLในทุกคอลัมน์ว่า " ใช่ " หากเราต้องการให้ข้อมูลนี้บังคับ คลิก " บันทึก " เพียงเท่านี้ก็มีการสร้างตารางแล้ว หากต้องการลบตารางทดสอบของเรา ให้คลิกขวาที่ตาราง (ในแผนผัง) และ " ลบ " เพราะ เราไม่ต้องการมันอีกต่อไปแล้ว เพราะเราจะสร้างตารางจากโปรแกรมของเรา ปิดpgAdminแล้วไปที่โปรแกรมของเรา มาร่วมเปิด IDEA กับโครงการของเรา คลิกฐานข้อมูลในคอลัมน์ด้านขวาของอินเทอร์เฟซ คลิกที่ " + " เพื่อเพิ่มฐานข้อมูลของเรา แหล่งข้อมูล ถัดไป-> PostgreSQL ในหน้าต่างป๊อปอัป ให้ป้อนบทบาทรูท ที่เราสร้างไว้ก่อนหน้านี้ในฟิลด์ ผู้ใช้และรหัสผ่านของเราการเพิ่มฐานข้อมูล PostgreSQL ให้กับบริการ RESTful บน Spring Boot  ตอนที่ 1 - 18การเพิ่มฐานข้อมูล PostgreSQL ให้กับบริการ RESTful บน Spring Boot  ส่วนที่ 1 - 19123ใน ช่อง รหัสผ่าน ใน ฟิลด์ ฐานข้อมูล เราเขียนชื่อ ฐานข้อมูลลูกค้า ของเรา เรากดปุ่มทดสอบการเชื่อมต่อและหากเราเห็นเครื่องหมายถูกสีเขียวข้างใต้แสดงว่าทุกอย่างเป็นไปตามลำดับและเรากดปุ่มตกลง . การเพิ่มฐานข้อมูล PostgreSQL ให้กับบริการ RESTful บน Spring Boot  ส่วนที่ 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 แล้ว ไปที่โฟลเดอร์ทรัพยากรแล้วกรอก ไฟล์ 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เราจึงเลือกภาษาถิ่นที่มีชื่อเดียวกัน คลิกตกลง การเพิ่มฐานข้อมูล PostgreSQL ให้กับบริการ RESTful บน Spring Boot  ตอนที่ 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
);
หลังจากกรอกไฟล์แล้ว หากคำอื่นที่ไม่ใช่ไคลเอ็นต์ เขียนด้วยแบบอักษรสีขาว ให้คลิกขวาที่ข้อความแล้วเลือก 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 ขอขอบคุณผู้ดูแลสำหรับการแก้ไขรูปภาพและการจัดรูปแบบข้อความของฉัน!
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION