ما هو JPA؟
التمهيد الربيع JPA هي مواصفات جافا للإدارة العلائقية البيانات في تطبيقات جافا. يسمح لنا بالوصول إلى البيانات واستمرارها بين كائن/فئة Java وقاعدة البيانات العلائقية. يتبع JPA رسم خرائط العلاقة بين الكائنات (أو آر إم). إنها مجموعة من الواجهات. كما يوفر وقت التشغيل EntityManager API لمعالجة الاستعلامات والمعاملات على الكائنات مقابل قاعدة البيانات. ويستخدم لغة استعلام كائنية التوجه مستقلة عن النظام الأساسي JPQL (لغة استعلام Java المستمرة).
وفي سياق الثبات، فهو يغطي ثلاثة مجالات:
- واجهة برمجة تطبيقات استمرار جافا
- واجهة برمجة التطبيقات (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 التي تم تعريفها في استمرار جافاكس طَرد. تحتوي بنية JPA على الوحدات التالية:
العلاقات الصفية JPA
تحافظ الفئات والواجهات التي ناقشناها أعلاه على العلاقة. ويوضح الشكل التالي العلاقة بين الفئات والواجهات.
- العلاقة بين EntityManager و EntiyTransaction هي واحد لواحد . يوجد مثيل EntityTransaction لكل عملية EntityManager.
- العلاقة بين EntityManageFactory و EntiyManager هي واحد لكثير . إنها فئة مصنع لمثيل EntityManager.
- العلاقة بين EntityManager و Query هي واحد لكثير . يمكننا تنفيذ أي عدد من الاستعلامات باستخدام مثيل لفئة EntityManager.
- العلاقة بين EntityManager و Entity هي واحد لكثير . يمكن لمثيل EntityManager إدارة كيانات متعددة.
تطبيقات JPA
JPA هي واجهة برمجة تطبيقات مفتوحة المصدر. هناك العديد من بائعي المؤسسات مثل Eclipse وRedHat وOracle وما إلى ذلك الذين يقدمون منتجات جديدة عن طريق إضافة JPA فيها. هناك بعض أطر تنفيذ JPA الشائعة مثل السبات، EclipseLink، DataNucleus، إلخ، ومن المعروف أيضًا باسم رسم خرائط العلاقة بين الكائنات أداة (ORM).
تعيين علاقات الكائنات (ORM)
في ORM، يتم استدعاء تعيين كائنات Java إلى جداول قاعدة البيانات، والعكس صحيح رسم الخرائط العلائقية للكائنات. يعمل تعيين ORM كجسر بين أ قاعدة بيانات علائقية (الجداول والسجلات) و تطبيق جافا (الفئات والأشياء).
في الشكل التالي، طبقة ORM هي طبقة محول. يقوم بتكييف لغة الرسوم البيانية للكائنات مع لغة SQL وجداول العلاقات.
توجد طبقة ORM بين التطبيق وقاعدة البيانات. يقوم بتحويل فئات وكائنات 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 . وهو يدعم الميزات التالية:
- جافا 8، واجهة برمجة التطبيقات للبيانات والوقت
- حقن CDI في تحويل السمات
- يجعل التعليقات التوضيحيةRepeatable
الفرق بين JPA والإسبات
جي بي ايه: JPA هي إحدى مواصفات Java التي يتم استخدامها للوصول إلى البيانات وإدارتها واستمرارها بين كائن Java وقاعدة البيانات العلائقية. إنه نهج قياسي لـ ORM.
بيات شتوى: إنها أداة ORM خفيفة الوزن ومفتوحة المصدر تُستخدم لتخزين كائنات Java في نظام قاعدة البيانات العلائقية. وهو مزود JPA. إنه يتبع نهجًا مشتركًا قدمته JPA.
يصف الجدول التالي الاختلافات بين JPA وHbernate.
JPA | بيات شتوى |
---|---|
JPA هو مواصفات جافا لتعيين بيانات العلاقة في تطبيق Java. | السبات هو إطار عمل ORM الذي يتعامل مع ثبات البيانات. |
لا توفر JPA أي فئات تنفيذ. | ويوفر فئات التنفيذ. |
ويستخدم لغة استعلام مستقلة عن النظام الأساسي تسمى جي بي كيو إل (لغة استعلام استمرار جافا). | ويستخدم لغة الاستعلام الخاصة به والتي تسمى HQL (لغة الاستعلام السبات). |
يتم تعريفه في javax.persistence طَرد. | يتم تعريفه في org.hibernate طَرد. |
يتم تنفيذه في أدوات ORM المختلفة مثل السبات، إكليبس لينك، إلخ. | السبات هو مزود من مديرية الأمن العام. |
يستخدم JPA EntityManager للتعامل مع استمرارية البيانات. | في استخدامات السبات حصة للتعامل مع استمرارية البيانات. |
بيانات بداية تشغيل Spring (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
مثال على التمهيد الربيعي JPA
لنقم بإنشاء تطبيق Spring Boot الذي يستخدم JPA للاتصال بقاعدة البيانات. في المثال التالي، استخدمنا قاعدة بيانات في الذاكرة أباتشي ديربي.
أباتشي ديربي: إنه ل مفتوح المصدر، مضمن قاعدة بيانات علائقية تم تنفيذها بالكامل في Java. وهي متاحة بموجب ترخيص أباتشي 2.0. هناك المزايا التالية لـ Apache Derby:
- إنه سهل التثبيت والنشر والاستخدام.
- يعتمد على معايير Java وJDBC وSQL.
- فهو يوفر برنامج تشغيل JDBC مضمنًا يسمح لنا بتضمين Derby في أي حل يستند إلى Java.
- كما أنه يدعم وضع العميل/الخادم مع برنامج تشغيل Derby Network Client JDBC وDerby Network Server.
يمكن لـ Spring Boot التكوين التلقائي لقاعدة بيانات مضمنة مثل H2, HSQL, و قواعد بيانات ديربي . لا نحتاج إلى تقديم أي عناوين URL للاتصال. نحتاج فقط إلى تضمين تبعية البناء على قاعدة البيانات المضمنة التي نريد استخدامها.
في Spring Boot، يمكننا بسهولة دمج قاعدة بيانات Apache Derby فقط عن طريق الإضافة ديربي التبعية في ملف pom.xml.
org.apache.derby derby runtime
الخطوة 1: فتح تهيئة الربيع https://start.spring.io/ .
الخطوة 2: حدد أحدث إصدار من Spring Boot 2.3.0 (لقطة)
الخطوه 3: توفير مجموعة اسم. قدمنا com.javatpoint.
الخطوة 4: توفير الأداة بطاقة تعريف. قدمنا اباتشي ديربي سبيل المثال .
الخطوة 5: أضف التبعيات: ربيع ويب، ربيع بيانات JPA، و قاعدة بيانات أباتشي ديربي .
الخطوة 6: اضغط على يولد زر. عندما نضغط على زر إنشاء، فإنه يغلف المشروع في ملف Jar ويقوم بتنزيله على النظام المحلي.
الخطوة 7: استخراج ملف Jar والصقه في مساحة عمل STS.
الخطوة 8: الاستيراد مجلد المشروع إلى STS.
ملف -> استيراد -> مشاريع Maven الحالية -> تصفح -> حدد المجلد apache-derby-example -> إنهاء
يستغرق الاستيراد بعض الوقت.
الخطوة 9: قم بإنشاء حزمة بالاسم com.javatpoint.model في المجلد src/main/java.
الخطوة 10: إنشاء فئة بالاسم سجل المستخدم في حزمة com.javatpoint.model وقم بما يلي:
- تحديد ثلاثة متغيرات الاسم, و بريد إلكتروني .
- توليد Getters وSetter.
انقر بزر الماوس الأيمن على الملف -> المصدر -> إنشاء الحروف والإعدادات - تحديد المنشئ الافتراضي.
- وضع علامة على الفصل باعتباره كيان باستخدام التعليق التوضيحي @كيان.
- علامة بطاقة تعريف كمفتاح أساسي باستخدام التعليق التوضيحي @بطاقة تعريف.
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: قم بإنشاء فئة تحكم بالاسم UserController في حزمة com.javatpoint.controller وقم بما يلي:
- قم بتمييز الفئة كوحدة تحكم باستخدام التعليق التوضيحي @RestController.
- Autowired الفصل خدمة المستخدم باستخدام التعليق التوضيحي @Autowired .
- لقد حددنا تعيينين، أحدهما لـ الحصول على كافة المستخدمين والآخر ل إضافة مستخدم.
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: قم بإنشاء فئة خدمة بالاسم خدمة المستخدم في حزمة com.javatpoint.service وقم بما يلي:
- قم بتمييز الفئة كخدمة باستخدام التعليق التوضيحي @خدمة.
- تم توصيله تلقائيًا مستودع المستخدم
- تحديد طريقة الحصول على جميع المستخدمين () التي ترجع قائمة
- تحديد اسم أسلوب آخر إضافة مستخدم () الذي يحفظ سجل المستخدم.
UserService.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 ويمتد مستودع الخام .
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); } }
لقد قمنا الآن بإعداد جميع الفئات والحزم اللازمة وفقًا للمتطلبات. لاحظ أننا لم نقدم أي عنوان URL للاتصال لقاعدة البيانات. بعد الانتهاء من جميع الخطوات السابقة، يصبح دليل المشروع بالشكل التالي:
لنقم بتشغيل التطبيق.
الخطوة 18: افتح ال ApacheDerbyExampleApplication.java قم بتشغيل الملف وتشغيله كتطبيق Java.
الخطوة 19: افتح المتصفح واستدع عنوان URL http://localhost:8080/. تقوم بإرجاع قائمة فارغة لأننا لم نضيف أي مستخدم في القائمة.
لإضافة مستخدم إلى قاعدة البيانات، سوف نقوم بإرسال بريد الطلب باستخدام ساعي البريد .
الخطوة 20: افتح ال ساعي البريد وقم بما يلي:
- حدد بريد
- استدعاء عنوان URL http://localhost:8080/add-user.
- اضغط على جسم
- حدد نوع المحتوى كـ JSON (التطبيق/جسون).
- أدخل البيانات التي تريد إدراجها في قاعدة البيانات. لقد أدخلنا البيانات التالية:
{ 'id': '001', 'name': 'Tom', 'email': '[email protected]' }
- اضغط على يرسل زر.
عندما نضغط على زر الإرسال، يظهر الحالة: 200 موافق . يعني تم تنفيذ الطلب بنجاح
الخطوة 21: افتح المتصفح واستدع عنوان URL http://localhost:8080. يقوم بإرجاع المستخدم الذي قمنا بإدراجه في قاعدة البيانات.
قم بتنزيل مشروع مثال أباتشي ديربي