תרשה לי להתחיל ואומר שמאוד נהניתי מסדרת המאמרים של אלינור קרי בשם "REST Overview". להלן קישורים למאמרים אלו:
- סקירה כללית של REST. חלק 1: מהי REST
- סקירה כללית של REST. חלק 2: תקשורת בין לקוח לשרת
- סקירה כללית של REST. חלק 3: יצירת שירות רגוע באביב אתחול
<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
);
אם לאחר מילוי הקובץ, כמה מילים מלבד לקוחות כתובות בגופן לבן, לחץ לחיצה ימנית בתוך הטקסט ובחר שנה דיאלקט --> 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 --> שרתים --> PostgreSQL 12 --> מסדי נתונים --> לקוחות --> סכמות --> ציבוריות , לחץ לחיצה ימנית על " טבלאות ", " עדכון ". אם הכל הלך כשורה, אז אנחנו רואים את טבלת הלקוחות שיצרנו . לאחר מכן, חזור לקובץ 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: ערך מפתח כפול מפר את האילוץ הייחודי "clients_pkey" . זה קורה כי כבר מילאנו את השדות עם id 1 ו -2 בטבלה (אפילו במהלך ההשקה הראשונה). בטבלה שיצרנו, השדה id מצוין כ- bigserial , המתאים לסוג Long ב-Java. עם זאת, בתוכנית שלנו הסוג עבור שדה זה הוא מספר שלם . החלטתי להראות כיצד להשתמש ב-Long (BIGSERIAL) כי יש לו טווח גדול יותר מ-Integer. העובדה היא שבטבלאות, שדה המיועד כמפתח ראשי יכול לשמש לא רק לאחסון מזהי משתמש , אלא גם לאחסון אינדקסים של מגוון רחב של נתונים, ומספר הרשומות הללו יכול לחרוג מהערך המקסימלי של מספר שלם. לדוגמה, אם התוכנית שלנו לוקחת כמה מדידות כל שנייה וכותבת את הנתונים לטבלה. על מנת לשכתב את המחלקות שלנו לשימוש בסוג הנתונים Long, עלינו לשנות את הסוג מ-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 , לחץ לחיצה ימנית על " טבלאות " ( בבסיס הנתונים של הלקוחות שלנו ) - -> " עדכן ", ונראה שהטבלה שלנו נעלמה. NB! היזהר בעת שימוש בפקודה זו, אחרת אתה מסתכן באובדן כל הנתונים שהיו לך בטבלה! בוא נחזור לקובץ 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