Java Persistence Query Language

Download Report

Transcript Java Persistence Query Language

© Keren Kalif
JPA
‫קרן כליף‬
© Keren Kalif
2
:‫ביחידה זו נלמד‬
JPA ‫ מהו‬
JPQL 
Criteria API 
‫מהו ‪?JPA‬‬
‫‪© Keren Kalif‬‬
‫‪ API – Java Persistence API ‬המגדיר עבודה מול ‪DB‬‬
‫‪ ‬זהו ממשק המגדיר ישויות (‪ )Entity‬שכל אחת באופן אוטומטי‬
‫יוצרת טבלה ב‪DB -‬‬
‫‪ ‬כלומר‪ ,‬ה‪ DB -‬נוצר באמצעות ‪ annotation‬בשפת ‪ JAVA‬תוך כדי‬
‫ריצה‬
‫‪ ‬ישנם כל מיני מימושים ל‪ ,JPA -‬למשל ‪hibernate‬‬
‫‪3‬‬
© Keren Kalif
4
SqlServer -‫חיבור ל‬
 Databases ‫ מקש ימני על‬ services ‫ בכרטיסית‬
Register My SQL Server
© Keren Kalif
5
SqlServer -‫חיבור ל‬
Connect  ‫ מקש ימני‬
Create Databse  ‫ מקש ימני‬
‫במידה ומבקש קונפיגורציה‪..‬‬
‫ה‪ service -‬של ‪ MySql‬צריך לרוץ‪.‬‬
‫ניתן להריצו דרך ה‪.XAMPP -‬‬
‫לשים לב שה‪ service -‬של ה‪ apache -‬גם צריך לרוץ‪.‬‬
‫‪© Keren Kalif‬‬
‫‪6‬‬
‫יצירת הפרוייקט‬
‫‪© Keren Kalif‬‬
‫‪ ‬נוסיף לפרוייקט את ה‪ lib -‬שנקרא ‪MySql JDBC Driver‬‬
‫‪ ‬בתוך הפרוייקט נייצר קובץ מטיפוס ‪:Entity Class‬‬
‫‪7‬‬
© Keren Kalif
8
persistence.xml
© Keren Kalif
9
‫הקובץ שנוצר‪:‬‬
‫ציון שזוהי מחלקה שתהייה‬
‫עבורה טבלה ב‪DB -‬‬
‫ציון שזהו שדה שערכו ינתן‬
‫באופן סדרתי אוטומטי‬
‫‪10‬‬
‫‪© Keren Kalif‬‬
‫עדכון המחלקה‬
‫ציון ששדה זה יהיה עמודה בטבלה‪,‬‬
‫ניתן גם ללא ‪ annotation‬זה‬
‫ציון ששדה זה יהיה עמודה‬
‫בטבלה עם השם שצויין‬
‫למחלקה המסומנת כ‪Entity -‬‬
‫חייב להיות ‪default c’tor‬‬
‫‪11‬‬
‫‪© Keren Kalif‬‬
main -‫ה‬
persistency unit -‫קישור ל‬
persistence.xml -‫המוגדרת ב‬
DB -‫ ב‬c1 ‫לשמירת האובייקט‬
© Keren Kalif
12
‫תוצר הרצת ה‪main -‬‬
‫תחת ה‪ DB -‬נוצרה טבלה כשם המחלקה‪,‬‬
‫ובה השדות שהגדרנו במחלקה‬
‫מקש ימני על שם הטבלה ‪View Data ‬‬
‫‪13‬‬
‫‪© Keren Kalif‬‬
© Keren Kalif
14
‫חיפוש רשומה‬
‫עדכון רשומה‬
‫העדכון יבוצע בין ה‪-‬‬
‫‪ begin‬ל‪commit -‬‬
‫‪© Keren Kalif‬‬
‫‪15‬‬
© Keren Kalif
16
‫מחיקת רשומה‬
‫אובייקט מוכל‬
‫ניתן להחליף ב‪ @Embeddable -‬ואז לא‬
‫ניתן לשמור אובייקט כזה בפני עצמו ל‪-‬‬
‫‪( DB‬לא תיווצר טבלה)‬
‫‪17‬‬
‫‪© Keren Kalif‬‬
‫אובייקט מכיל‬
‫שדות האובייקט המוכל ישמרו‬
‫בטבלאת האובייקט המכיל‬
‫‪18‬‬
‫‪© Keren Kalif‬‬
main -‫ה‬
student ‫ניתן לראות בטבלה‬
Address ‫את שדות‬
© Keren Kalif
19
‫‪@OneToOne‬‬
‫במקרה זה ישמר בטבלאת‬
‫‪ person‬רק המפתח הראשי‬
‫של ה‪Address -‬‬
‫נשים לב שמקרה כזה המחלקה‬
‫‪ Address‬צריכה להיות מסומנת ב‪-‬‬
‫‪ @Entity‬ולא ב‪@Embeddable -‬‬
‫‪20‬‬
‫‪© Keren Kalif‬‬
© Keren Kalif
21
‫ הטבלאות‬- @OneToOne
@OneToMany
© Keren Kalif
22
‫ התוצרים‬- @OneToMany
OneToOne
OneToMany
-‫ובאופן דומה ניתן להשתמש גם ב‬
@ManyToMany -‫@ וב‬ManyToOne
© Keren Kalif
23
‫שאילתות‬
‫‪© Keren Kalif‬‬
‫‪24‬‬
‫‪ ‬ישנם ‪ 2‬סוגים של שאילתות‪:‬‬
‫‪ – static queries ‬שאילתות קבועות‪ ,‬ללא פרמטרים‬
‫‪ – dynamic queries ‬שאילתות המקבלות פרמטרים‬
‫‪ ‬ישנם ‪ 2‬מנגנונים לשאילתות ב‪:JPA -‬‬
‫‪JPQL – Java Persistence Query .1‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫שפת שאילתות הדומה ל‪ SQL -‬ומבוססת על סכימת הישויות והקשרים בינהן‬
‫מפוענחות בזמן קומפילציה‬
‫עדיפות לשימוש עבור ‪static queries‬‬
‫‪Criteria Query .2‬‬
‫‪‬‬
‫‪‬‬
‫מפוענחות בזמן ריצה‬
‫עדיפות לשימוש עבור ‪dynamic queries‬‬
‫‪JPQL – Java Persistence Query Language‬‬
‫‪ ‬ישנם ‪ 2‬דרכים להפעלת השאילתות‪:‬‬
‫‪ – createQuery .1‬הגדרת השאילתא בתוך המתודות‪ ,‬לרוב עבור‬
‫שאילתות דינאמיות‬
‫‪ – createNameQuery .2‬הגדרת מאפייני השאילתא כתכונה‬
‫במחלקה ושימוש בהמשך‪ ,‬לרוב עבור שאילתות סטטיות‬
‫‪25‬‬
‫‪© Keren Kalif‬‬
NamedQuery ‫הגדרת‬
:NamedQuery ‫הגדרת‬
@Entity -‫מתחת ל‬
© Keren Kalif
26
Queries -‫שימוש ב‬
-‫שימוש ב‬
NamedQuery
Query -‫שימוש ב‬
© Keren Kalif
27
‫ הגדרה‬- Positional Parameters
‫לפני מספר‬
"?" ‫הפרמטר יבוא‬
© Keren Kalif
28
‫ שימוש‬- Positional Parameters
© Keren Kalif
29
Criteria Queries
dynamic ‫ לכן עדיפות לשימוש עבור‬,‫ מפוענחות בזמן ריצה‬
queries
© Keren Kalif
30
‫יצירת המחלקות מה‪DB -‬‬
‫‪ ‬בהינתן ‪ ,DB‬ניתן לייצר את התהליך ההפוך ולקבל את המחלקות‪:‬‬
‫‪31‬‬
‫‪© Keren Kalif‬‬
Web-Application -‫ ב‬JPA ‫לבדוק פרוייקט‬
© Keren Kalif
32
‫ביחידה זו למדנו‪:‬‬
‫‪© Keren Kalif‬‬
‫‪33‬‬