logo

Spring Boot JPA

מה זה JPA?

Spring Boot JPA הוא מפרט Java לניהול יחסי נתונים ביישומי Java. זה מאפשר לנו לגשת ולהתמיד בנתונים בין אובייקט/מחלקה של Java ומסד נתונים יחסי. JPA עוקב מיפוי יחסי אובייקט (ORM). זה סט של ממשקים. זה גם מספק זמן ריצה מנהל ישות API לעיבוד שאילתות ועסקאות על האובייקטים מול מסד הנתונים. הוא משתמש בשפת שאילתות מונחה עצמים ללא פלטפורמה JPQL (Java Persistent Query Language).

בהקשר של התמדה, הוא מכסה שלושה תחומים:

  • ה-API של Java Persistence
  • אובייקט-יחסימטא נתונים
  • ה-API עצמו, המוגדר ב- הַתמָדָה חֲבִילָה

JPA אינו מסגרת. הוא מגדיר מושג שניתן ליישם על ידי כל מסגרת.

מדוע עלינו להשתמש ב-JPA?

JPA פשוט יותר, נקי יותר ופחות אינטנסיבי יותר מ-JDBC, SQL ומיפוי בכתב יד. JPA מתאים ליישומים מורכבים ללא ביצועים. היתרון העיקרי של JPA על פני JDBC הוא שב-JPA, הנתונים מיוצגים על ידי אובייקטים ומחלקות ואילו ב-JDBC הנתונים מיוצגים על ידי טבלאות ורשומות. הוא משתמש ב-POJO כדי לייצג נתונים מתמשכים המפשטים את תכנות מסד הנתונים. ישנם כמה יתרונות נוספים של JPA:

  • JPA נמנע מלכתוב DDL בניב ספציפי לבסיס נתונים של SQL. במקום זאת, הוא מאפשר מיפוי ב-XML או שימוש בהערות Java.
  • JPA מאפשר לנו להימנע מכתיבת DML בניב הספציפי לבסיס הנתונים של SQL.
  • JPA מאפשר לנו לשמור ולטעון אובייקטים וגרפים של Java ללא שפת DML כלל.
  • כאשר אנו צריכים לבצע שאילתות JPQL, זה מאפשר לנו לבטא את השאילתות במונחים של ישויות Java ולא בטבלת SQL ועמודות (המקוריות).

תכונות JPA

ישנן התכונות הבאות של JPA:

  • זהו מאגר רב עוצמה והתאמה אישית הפשטה של ​​מיפוי אובייקטים.
  • זה תומך עבור התמדה בין חנויות . המשמעות היא שניתן לאחסן ישות חלקית ב-MySQL וב-Neo4j (מערכת לניהול מסדי נתונים של גרפים).
  • זה יוצר באופן דינמי שאילתות מתוך שם שיטות שאילתות.
  • מחלקות הבסיס של הדומיין מספקות מאפיינים בסיסיים.
  • הוא תומך בביקורת שקופה.
  • אפשרות לשילוב קוד מאגר מותאם אישית.
  • קל לשלב עם Spring Framework עם מרחב השמות המותאם אישית.

אדריכלות JPA

JPA הוא מקור לאחסון ישויות עסקיות כישויות יחסיות. זה מראה כיצד להגדיר POJO כישות וכיצד לנהל ישויות עם קשר.

האיור הבא מתאר את הארכיטקטורה ברמת הכיתה של JPA המתארת ​​את מחלקות הליבה והממשקים של JPA המוגדרים ב- התמדה של javax חֲבִילָה. ארכיטקטורת JPA מכילה את היחידות הבאות:

מחרוזת java למספר שלם
    הַתמָדָה:זוהי מחלקה המכילה שיטות סטטיות להשגת מופע EntityManagerFactory.EntityManagerFactory:זה מחלקה במפעל של EntityManager. הוא יוצר ומנהל מופעים מרובים של EntityManager.מנהל ישות:זה ממשק. זה שולט בפעולות ההתמדה על אובייקטים. זה עובד עבור מופע ה-Query.יֵשׁוּת:הישויות הן אובייקטי הקביעות המאחסנים כרשומה במסד הנתונים.יחידת התמדה:הוא מגדיר קבוצה של כל מחלקות הישות. ביישום, מופעי EntityManager מנהלים אותו. קבוצת מחלקות הישות מייצגת את הנתונים הכלולים במאגר נתונים יחיד.עסקת ישות:יש לזה אחד לאחד מערכת יחסים עם הכיתה EntityManager. עבור כל EntityManager, הפעולות מתוחזקות לפי מחלקת EntityTransaction.שאילתא:זהו ממשק שמיושם על ידי כל ספק JPA כדי להשיג אובייקטי יחס העומדים בקריטריונים.
Spring Boot jpa

קשרי מעמדות JPA

השיעורים והממשקים עליהם דיברנו לעיל שומרים על מערכת יחסים. האיור הבא מציג את הקשר בין מחלקות וממשקים.

Spring Boot jpa
  • מערכת היחסים בין EntityManager ו-EntiyTransaction היא אחד לאחד . יש מופע EntityTransaction עבור כל פעולת EntityManager.
  • הקשר בין EntityManageFactory ל-EntiyManager הוא אחד לרבים . זה מחלקה במפעל למופע EntityManager.
  • הקשר בין EntityManager ל-Query הוא אחד לרבים . אנו יכולים לבצע כל מספר של שאילתות באמצעות מופע של מחלקה EntityManager.
  • מערכת היחסים בין EntityManager ל-Entity היא אחד לרבים . מופע EntityManager יכול לנהל ישויות מרובות.

יישום JPA

JPA הוא API בקוד פתוח. יש ספקי ארגונים שונים כמו Eclipse, RedHat, Oracle וכו' המספקים מוצרים חדשים על ידי הוספת ה-JPA בהם. יש כמה מסגרות יישומי JPA פופולריות כגון Hibernate, EclipseLink, DataNucleus, וכו' זה ידוע גם בשם מיפוי יחסי אובייקט כלי (ORM).

מיפוי יחסי אובייקט (ORM)

ב-ORM, מיפוי אובייקטי Java לטבלאות מסד נתונים, ולהיפך נקרא מיפוי יחסי אובייקט. מיפוי ORM פועל כגשר בין א מאגר נתונים יחסי (טבלאות ורשומות) ו אפליקציית Java (כיתות וחפצים).

באיור הבא, שכבת ORM היא שכבת מתאם. הוא מתאים את שפת גרפי האובייקטים לשפת SQL וטבלאות יחס.

Spring Boot jpa

שכבת ORM קיימת בין האפליקציה למסד הנתונים. זה ממיר את המחלקות והאובייקטים של Java כך שניתן לאחסן ולנהל אותם במסד נתונים יחסי. כברירת מחדל, השם שנשאר הופך לשם הטבלה, ושדות הופכים לעמודות. לאחר הגדרת יישום, כל שורת טבלה מתאימה לאובייקט.

משתנה משתנה java

גרסאות JPA

גרסאות קודמות של EJB מגדירות את שכבת ההתמדה בשילוב עם שכבת ההיגיון העסקי באמצעות javax.ejb.EntityBean מִמְשָׁק. מפרט EJB כולל את ההגדרה של JPA.

בזמן הצגת EJB 3.0, שכבת ההתמדה הופרדה וצוינה כ-JPA 1.0 (Java Persistence API). המפרטים של API זה שוחררו יחד עם המפרטים של JAVA EE5 ב-11 במאי 2006, תוך שימוש ב-JSR 220.

בשנת 2019, JPA שונה ל ג'קרטה התמדה . הגרסה האחרונה של JPA היא 2.2 . הוא תומך בתכונות הבאות:

  • Java 8, נתונים וזמן API
  • הזרקת CDI ב-AttributeConvertes
  • זה עושה הערות @Repeatable

ההבדל בין JPA לבין Hibernate

JPA: JPA הוא מפרט Java המשמש לגישה, ניהול ושמירה על נתונים בין אובייקט Java לבין מסד נתונים יחסי. זוהי גישה סטנדרטית עבור ORM.

מצב שינה: זהו כלי ORM קל משקל, קוד פתוח המשמש לאחסון אובייקטי Java במערכת מסד הנתונים ההתייחסותיים. זה ספק של JPA. היא פועלת לפי גישה נפוצה שמספקת JPA.

הטבלה הבאה מתארת ​​את ההבדלים בין JPA לבין Hibernate.

JPA שינה
JPA הוא א מפרט Java למיפוי נתוני קשר ביישום Java. Hibernate הוא מסגרת ORM שעוסק בהתמדה נתונים.
JPA אינו מספק שיעורי יישום. הוא מספק שיעורי יישום.
הוא משתמש בשפת שאילתה עצמאית פלטפורמה בשם JPQL (שפת שאילתת התמדה ב-Java). הוא משתמש בשפת שאילתה משלו בשם HQL (שפת שאילתות שינה).
זה מוגדר ב javax.persistence חֲבִילָה. זה מוגדר ב org.hibernate חֲבִילָה.
זה מיושם בכלי ORM שונים כמו Hibernate, EclipseLink, וכו ' מצב שינה הוא ה ספק של PSD.
JPA משתמש מנהל ישות לטיפול בהתמדה של נתונים. בשימושים במצב Hibernate מוֹשָׁב לטיפול בהתמדה של נתונים.

Spring Boot Starter Data JPA

Spring Boot מספק תלות במתחילים spring-boot-starter-data-jpa כדי לחבר את יישום Spring Boot עם מסד נתונים יחסי ביעילות. ה-spring-boot-starter-data-jpa משתמש באופן פנימי בתלות spring-boot-jpa.

 org.springframework.boot spring-boot-starter-data-jpa 2.2.2.RELEASE 

Spring Boot JPA דוגמה

בואו ניצור יישום Spring Boot שמשתמש ב-JPA כדי להתחבר למסד הנתונים. בדוגמה הבאה, השתמשנו במסד נתונים בזיכרון דרבי אפאצ'י.

דרבי אפאצ'י: זה קוד פתוח, מוטבע מסד נתונים יחסי מיושם כולו ב-Java. זה זמין תחת רישיון Apache 2.0. ישנם היתרונות הבאים של Apache Derby:

  • זה קל להתקנה, פריסה ושימוש.
  • הוא מבוסס על תקני Java, JDBC ו-SQL.
  • הוא מספק מנהל התקן JDBC משובץ המאפשר לנו להטמיע את Derby בכל פתרון מבוסס Java.
  • הוא תומך גם במצב לקוח/שרת עם מנהל ההתקן של לקוח Derby Network JDBC, ושרת רשת Derby.

Spring Boot יכול להגדיר אוטומטית מסד נתונים מוטבע כגון H2, HSQL, ו מסדי נתונים של דרבי . איננו צריכים לספק כתובות אתרים לחיבור. עלינו לכלול רק תלות בנייה במסד הנתונים המוטבע שבו אנו רוצים להשתמש.

ב-Spring Boot, אנו יכולים לשלב בקלות את מסד הנתונים של Apache Derby רק על ידי הוספה דרבי תלות בקובץ pom.xml.

 org.apache.derby derby runtime 

שלב 1: Open Spring Initializr https://start.spring.io/ .

שלב 2: בחר את הגרסה האחרונה של Spring Boot 2.3.0 (תמונה קצרה)

שלב 3: ספק את קְבוּצָה שֵׁם. סיפקנו com.javatpoint.

שלב 4: ספק את חפץ תְעוּדַת זֶהוּת. סיפקנו דוגמה-אפאצ'י-דרבי .

שלב 5: הוסף את התלות: Spring Web, Spring Data JPA, ו מסד הנתונים של אפאצ'י דרבי .

java הממיר מספר שלם למחרוזת

שלב 6: הקלק על ה לִיצוֹר לַחְצָן. כאשר אנו לוחצים על כפתור Generate, הוא עוטף את הפרויקט בקובץ Jar ומוריד אותו למערכת המקומית.

Spring Boot jpa

שלב 7: חלץ קובץ Jar והדבק אותו בסביבת העבודה STS.

שלב 8: ייבוא את תיקיית הפרויקט לתוך STS.

קובץ -> ייבוא ​​-> פרויקטים קיימים של Maven -> עיון -> בחר בתיקייה apache-derby-example -> סיום

לוקח קצת זמן לייבא.

שלב 9: צור חבילה עם השם com.javatpoint.model בתיקייה src/main/java.

שלב 10: צור כיתה עם השם UserRecord בחבילה com.javatpoint.model ועשה את הפעולות הבאות:

  • הגדירו שלושה משתנים מזהה, שם, ו אימייל .
  • צור Getters ו-Setter.
    לחץ באמצעות לחצן העכבר הימני על הקובץ -> מקור -> צור Getters and Setters
  • הגדר בנאי ברירת מחדל.
  • סמן את הכיתה כ- יֵשׁוּת באמצעות ההערה @יֵשׁוּת.
  • סימן תְעוּדַת זֶהוּת כמפתח הראשי באמצעות ההערה @תְעוּדַת זֶהוּת.

UserRecord.java

 package com.javatpoint.model; import javax.persistence.Entity; import javax.persistence.Id; @Entity public class UserRecord { @Id private int id; private String name; private String email; //default conatructor public UserRecord() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } } 

שלב 11: צור חבילה עם השם com.javatpoint.controller בתיקייה src/main/java.

שלב 12: צור כיתת Controller עם השם UserController בחבילה com.javatpoint.controller ועשה את הפעולות הבאות:

  • סמן את הכיתה כבקר באמצעות ההערה @RestController.
  • חיבר אוטומטית את הכיתה UserService באמצעות ההערה @Wired אוטומטי .
  • הגדרנו שני מיפויים, אחד עבור מקבל את כל המשתמשים והשני עבור הוסף משתמש.

UserController.java

 package com.javatpoint.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import com.javatpoint.model.UserRecord; import com.javatpoint.service.UserService; import java.util.List; @RestController public class UserController { @Autowired private UserService userService; @RequestMapping('/') public List getAllUser() { return userService.getAllUsers(); } @RequestMapping(value='/add-user', method=RequestMethod.POST) public void addUser(@RequestBody UserRecord userRecord) { userService.addUser(userRecord); } } 

שלב 13: צור חבילה עם השם com.javatpoint.service בתיקייה src/main/java.

שלב 14: צור כיתת שירות עם השם UserService בחבילה com.javatpoint.service ועשה את הפעולות הבאות:

  • סמן את הכיתה כשירות באמצעות ההערה @שֵׁרוּת.
  • חווט אוטומטי את מאגר משתמשים
  • הגדירו שיטה getAllUsers() שמחזיר רשימה של
  • הגדר שם שיטה אחר הוסף משתמש() ששומר את רשומת המשתמש.

UserService.java

מבנה java
 package com.javatpoint.service; import java.util.List; import java.util.ArrayList; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.javatpoint.model.UserRecord; import com.javatpoint.repository.UserRepository; @Service public class UserService { @Autowired private UserRepository userRepository; public List getAllUsers() { ListuserRecords = new ArrayList(); userRepository.findAll().forEach(userRecords::add); return userRecords; } public void addUser(UserRecord userRecord) { userRepository.save(userRecord); } } 

שלב 15: צור חבילה עם השם com.javatpoint.repository בתיקייה src/main/java.

שלב 16: צור ממשק מאגר עם השם מאגר משתמשים בחבילה com.javatpoint.repository ומתארך CrudRepository .

UserRepository.java

 package com.javatpoint.repository; import org.springframework.data.repository.CrudRepository; import com.javatpoint.model.UserRecord; public interface UserRepository extends CrudRepository { } 

שלב 17: עכשיו, פתח את ApacheDerbyExampleApplication.java קוֹבֶץ. זה נוצר כברירת מחדל כאשר הגדרנו אפליקציה.

ApacheDerbyExampleApplication.java

 package com.javatpoint; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class ApacheDerbyExampleApplication { public static void main(String[] args) { SpringApplication.run(ApacheDerbyExampleApplication.class, args); } } 

כעת, הגדרנו את כל השיעורים והחבילות הנדרשות בהתאם לדרישות. שימו לב שלא סיפקנו כתובת האתר לחיבור עבור מסד הנתונים. לאחר השלמת כל השלבים לעיל, ספריית הפרויקט נראית כך:

Spring Boot jpa

בוא נריץ את האפליקציה.

שלב 18: פתח את ה ApacheDerbyExampleApplication.java קובץ והפעל אותו כיישום Java.

שיטה תת מחרוזת java

שלב 19: פתח את הדפדפן והפעל את כתובת האתר http://localhost:8080/. זה מחזיר רשימה ריקה מכיוון שלא הוספנו אף משתמש ברשימה.

כדי להוסיף משתמש למסד הנתונים, נשלח א הודעה בקשה באמצעות ה דוור .

שלב 20: פתח את ה דוור ועשה את הפעולות הבאות:

  • בחר את הודעה
  • הפעל את כתובת האתר http://localhost:8080/add-user.
  • הקלק על ה גוּף
  • בחר תוכן-סוג כ JSON (אפליקציה/json).
  • הכנס את הנתונים שברצונך להכניס למסד הנתונים. הכנסנו את הנתונים הבאים:
 { 'id': '001', 'name': 'Tom', 'email': '[email protected]' } 
  • הקלק על ה לִשְׁלוֹחַ לַחְצָן.
Spring Boot jpa

כאשר אנו לוחצים על כפתור שלח, זה מופיע סטטוס: 200 בסדר . זה אומר שהבקשה בוצעה בהצלחה.

שלב 21: פתח את הדפדפן והפעל את כתובת האתר http://localhost:8080. זה מחזיר את המשתמש שהכנסנו למסד הנתונים.

Spring Boot jpa
הורד את פרויקט דרבי אפאצ'י לדוגמה