© Keren Kalif JPA קרן כליף
ביחידה זו נלמד: מהו JPA JPQL Criteria API
מהו JPA? Java Persistence API – API המגדיר עבודה מול DB זהו ממשק המגדיר ישויות (Entity) שכל אחת באופן אוטומטי יוצרת טבלה ב- DB כלומר, ה- DB נוצר באמצעות annotation בשפת JAVA תוך כדי ריצה ישנם כל מיני מימושים ל- JPA, למשל hibernate
חיבור ל- SqlServer בכרטיסית services מקש ימני על Databases Register My SQL Server
חיבור ל- SqlServer מקש ימני Connect מקש ימני Create Databse
במידה ומבקש קונפיגורציה.. ה- service של MySql צריך לרוץ. ניתן להריצו דרך ה- XAMPP. לשים לב שה- service של ה- apache גם צריך לרוץ.
יצירת הפרוייקט נוסיף לפרוייקט את ה- lib שנקרא MySql JDBC Driver בתוך הפרוייקט נייצר קובץ מטיפוס :Entity Class
persistence.xml
הקובץ שנוצר: ציון שזוהי מחלקה שתהייה עבורה טבלה ב- DB ציון שזהו שדה שערכו ינתן באופן סדרתי אוטומטי
עדכון המחלקה ציון ששדה זה יהיה עמודה בטבלה, ניתן גם ללא annotation זה ציון ששדה זה יהיה עמודה בטבלה עם השם שצויין למחלקה המסומנת כ- Entity חייב להיות default c’tor
קישור ל- persistency unit המוגדרת ב- persistence.xml ה- main קישור ל- persistency unit המוגדרת ב- persistence.xml לשמירת האובייקט c1 ב- DB
תחת ה- DB נוצרה טבלה כשם המחלקה, ובה השדות שהגדרנו במחלקה תוצר הרצת ה- main תחת ה- DB נוצרה טבלה כשם המחלקה, ובה השדות שהגדרנו במחלקה מקש ימני על שם הטבלה View Data
חיפוש רשומה
העדכון יבוצע בין ה- begin ל- commit עדכון רשומה העדכון יבוצע בין ה- begin ל- commit
מחיקת רשומה
אובייקט מוכל ניתן להחליף ב- @Embeddable ואז לא ניתן לשמור אובייקט כזה בפני עצמו ל- DB (לא תיווצר טבלה)
שדות האובייקט המוכל ישמרו בטבלאת האובייקט המכיל אובייקט מכיל שדות האובייקט המוכל ישמרו בטבלאת האובייקט המכיל
ניתן לראות בטבלה student את שדות Address ה- main ניתן לראות בטבלה student את שדות Address
במקרה זה ישמר בטבלאת person רק המפתח הראשי של ה- Address @OneToOne במקרה זה ישמר בטבלאת person רק המפתח הראשי של ה- Address נשים לב שמקרה כזה המחלקה Address צריכה להיות מסומנת ב- @Entity ולא ב- @Embeddable
@OneToOne - הטבלאות
@OneToMany
ובאופן דומה ניתן להשתמש גם ב- @ManyToOne וב- @ManyToMany @OneToMany - התוצרים OneToOne OneToMany ובאופן דומה ניתן להשתמש גם ב- @ManyToOne וב- @ManyToMany
שאילתות ישנם 2 סוגים של שאילתות: ישנם 2 מנגנונים לשאילתות ב- JPA: static queries – שאילתות קבועות, ללא פרמטרים dynamic queries – שאילתות המקבלות פרמטרים ישנם 2 מנגנונים לשאילתות ב- JPA: JPQL – Java Persistence Query שפת שאילתות הדומה ל- SQL ומבוססת על סכימת הישויות והקשרים בינהן מפוענחות בזמן קומפילציה עדיפות לשימוש עבור static queries Criteria Query מפוענחות בזמן ריצה עדיפות לשימוש עבור dynamic queries
JPQL – Java Persistence Query Language ישנם 2 דרכים להפעלת השאילתות: createQuery – הגדרת השאילתא בתוך המתודות, לרוב עבור שאילתות דינאמיות createNameQuery – הגדרת מאפייני השאילתא כתכונה במחלקה ושימוש בהמשך, לרוב עבור שאילתות סטטיות
הגדרת NamedQuery הגדרת NamedQuery: מתחת ל- @Entity
שימוש ב- Queries שימוש ב- NamedQuery שימוש ב- Query
Positional Parameters - הגדרה לפני מספר הפרמטר יבוא "?"
Positional Parameters - שימוש
Criteria Queries מפוענחות בזמן ריצה, לכן עדיפות לשימוש עבור dynamic queries
יצירת המחלקות מה- DB בהינתן DB, ניתן לייצר את התהליך ההפוך ולקבל את המחלקות:
לבדוק פרוייקט JPA ב- Web-Application
ביחידה זו למדנו: