English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
JPA في Spring Boot هي معيار Java الموجه للادارة في تطبيقات Javaالعلاقاتالبيانات. يسمح لنا بالوصول إلى إدارة البيانات بين الكائنات/الفئات والقواعد البيانات العلاقية. يتبع JPAخريطة العلاقات الكائنية(ORM). إنها مجموعة من واجهات البرمجة. وتقدم أيضًا EntityManager API، تستخدم لمعالجة الاستعلامات والتسجيلات ضد كائنات قاعدة البيانات. تستخدم لغة الاستعلامات الموجهة للأجسام غير المتعلقة بالمنصة JPQL (لغة الاستعلامات الجافا المستمرة).
في مجال الاستمرارية، يغطي ثلاثة مجالات:
APIات Java للاستمرارية العلاقة بين الكائنات والعلاقاتالمعلومات الوصفيةفي التحكم في الاستمرارية الAPI المحددة في الحزمة نفسها
JPA ليست إطارًا. إنها تحدد مفاهيم يمكن تنفيذها في أي إطار.
مقارنةً بـ JDBC، JPA أكثر بساطةً ونظافةً وأقل تكلفة في العمل، حيث يتم كتابة SQL والخرائط اليدوية. يُستخدم JPA في تطبيقات معقدة غير موجهة بالأداء. من بين مزايا JPA الرئيسية مقارنةً بـ JDBC، أن البيانات تمثلها الأجسام والفئات في JPA، بينما تمثلها الجداول والسجلات في JDBC. يستخدم POJO لتمثيل البيانات الدائمة، مما يسهل برمجة قاعدة البيانات. ويتمتع JPA بمزايا أخرى:
يهدف JPA إلى تجنب استخدام دلالات SQL المحددة للنظام الأساسي في كتابة DDL. بدلاً من ذلك، يسمح باستخدام XML أو استخدام تعليقات Java لتحديد الخرائط. يسمح لنا JPA بتجنب كتابة DML باستخدام لغات الدوال المحددة للبنوك الآلية للبيانات. يسمح لنا JPA بتخزين وتحميل الكائنات البرمجية والرسوم البيانية دون استخدام أي لغة DML.عندما نحتاج إلى تنفيذ استعلام JPQL، يسمح لنا باستخدام الكيانات البرمجية بدلاً من (الجملة الأصلية) جداول وعمودات SQL للتعبير عن الاستعلام.
يحتوي JPA على الميزات التالية:
هذه هي مكتبة قوية ومخصصةالتباين في رسم الكائنات. يتم دعمهالتبني المتعدد للمستودعات. هذا يعني أن الكيان يمكن تخزين جزء منه في MySQL و Neo4j (نظام إدارة قواعد البيانات البيانية).يتم إنشاء الاستعلامات بشكل ديناميكي من أسماء طرق الاستعلام.الفئات الأساسية للمناطق توفر الخصائص الأساسية.يتم دعم التدقيق الشفاف.إمكانية دمج كود المستودعات المخصصة.من السهل دمجها مع Spring Framework باستخدام مساحة الأسماء المخصصة.
JPA هي المصدر الذي يتم فيه تخزين الكيانات التجارية ككيانات علاقات. إنه يظهر كيف يتم تعريف POJO ككيان وكيف يتم إدارة الكيانات عبر العلاقات.
الشكل التالي يصف بنية فئات JPA، التي تصف الفئات والواجهات الأساسية لـ JPA. javax التبنيالحزم. يتضمن بنية JPA الوحدات التالية:
التبني: هذه هي فئة تحتوي على طرق ثابتة لتحصل على مثيل EntityManagerFactory. EntityManagerFactory: هي فئة مصنع EntityManager. إنها تخلق وتدير عدة أمثلة من EntityManager. EntityManager: . إنه واجهة. يتحكم في العمليات الدائمة للمساهمة. إنه مناسب لاستعلامات المثيل. Entity: يتم تخزين الأنظمة المعمارية كسجلات مخزنة في قاعدة البيانات. إنه واجهة. يتحكم في العمليات الدائمة للمساهمة. إنه مناسب لاستعلامات المثيل. وحدة التبني: يحدد مجموعة من جميع الفئات المحددة. في التطبيق، يتم إدارة هذه الفئات من قبل مثيل EntityManager. مجموعة من الفئات المحددة تمثل البيانات الموجودة في مستودع بيانات واحد. EntityTransaction: وهي تتشارك مع فئة EntityManager一对一العلاقة. لكل EntityManager، يتم حفظ العمليات من قبل فئة EntityTransaction. استعلام: يتم تنفيذ هذه الواجهة من قبل كل مزود JPA للحصول على عناصر العلاقة التي تتوافق مع الشروط.
الصور التي نناقشها في الصفحة السابقة تحافظ على علاقة. الشكل التالي يوضح علاقة الفئات والواجهات.
العلاقة بين EntityManager و EntityTransaction هي一对一للكل عملية EntityManager هناك مثيل EntityTransaction. العلاقة بين EntityManageFactory وEntityManager هيمرة واحدة، مرتينهذه هي فئة المصنع لـ EntityManager. العلاقة بين EntityManager وQuery هيمرة واحدة، مرتينيمكننا استخدام نموذج EntityManager للتنفيذ عدد غير محدود من الاستعلامات. العلاقة بين EntityManager وEntity هيمرة واحدة، مرتينيمكن لـ EntityManager إدارة عدة كيانات.
JPA هو API مفتوح المصدر. هناك العديد من المزودين التجاريين، مثل Eclipse،RedHat،Oracle وما إلى ذلك، الذين يقدمون منتجات جديدة من خلال إضافة JPA إليها. هناك العديد من إطارات العمل الشائعة لـ JPA، مثل Hibernate،EclipseLink،DataNucleus وغيرها. ويُطلق عليها أيضًاخريطة العلاقات الكائنية(ORM) أدوات.
في ORM، يتم تعريف خريطة Java الكائن إلى جدول البيانات (و العكس صحيح) بـخريطة العلاقات الكائنية تعتبر ORM خريطةقاعدة البيانات الأساسيةو (الجداول والسجلات) و تطبيق Javaجسر بين (الفئات والكتل) و
فيما يلي، كما هو موضح في الشكل، طبقة ORM هي طبقة التكيف. إنها تتكيف لغة نموذج الكائن بلغة SQL ولغة جداول الأساسية.
طبقة ORM موجودة بين التطبيق والأساسيات. إنه يحوّل فئات Java وكتلها لتمكين تخزينها وإدارتها في قواعد البيانات الأساسية. افتراضياً، سيصبح اسم التخزين اسم الجدول، وسيصبح الحقول أعمدة. بمجرد إنشاء التطبيق، سيكون كل سطر في الجدول يعادله كائن.
في إصدارات EJB المبكرة، تم تعريف طبقة التخزين بترابط مع طبقة منطق الأعمال. javax.ejb.EntityBean واجهة. تتضمن معيار EJB تعريف JPA.
عند إدخال EJB 3.0، تم فصل طبقة التخزين وتعيينها كـ JPA 1.0 (Java Persistence API). تم نشر معيار هذه API مع معيار JAVA EE5 في 11 مايو 2006 باستخدام JSR 220.
في عام 2019، تم إعادة تسمية JPA Jakarta Persistence النسخة الأحدث من JPA هي 2.2 هذا يدعم التفاعل التالي:
API بيانات ووقت Java 8 حقول التحويل في CDIإنه يدعم التعليمات البرمجية @Repeatable
JPA: JPA هو معيار Java يستخدم لتحديد، إدارة وتخزين البيانات بين كائنات Java والعلاقات الأساسية للبيانات الأساسية. هذا هو الطريقة القياسية لـ ORM.
Hibernate: هذا هو أداة ORM خفيفة ومفتوحة المصدر تستخدم لتخزين كائنات Java في قواعد البيانات العلاقية. وهو مزود JPA. يتبع طريقة عامة لتقديم JPA.
يصف الجدول أدناه الفرق بين JPA وHibernate.
JPA | Hibernate |
JPA هو مواصفة用于 رسم البيانات العلاقية في تطبيقات Java. مواصفة Java. | Hibernate هو مواصفة Java用于 معالجة الاستمرارية البيانات. إطار عمل ORM. |
JPA لا يقدم أي كلاسيكيات تنفيذ. | يقدم كلاسيكيات تنفيذ. |
يستخدم لغة استعلام JPQL (Java Persistence Query Language) لغة استعلام غير مرتبطة بالمنصة. | يستخدم لغة استعلام الخاصة به HQL لغة الاستعلام (لغة استعلام Hibernate). |
إنه معرف في javax.persistence المجموعة | إنه معرف في org.hibernate المجموعة |
إنه معرف في Hibernate،EclipseLink ومثل أدوات ORM المختلفة. | Hibernate هو المزود لـ JPAالمزود. |
يستخدم JPA EntityManager لمعالجة الاستمرارية البيانات. | في Hibernate، يتم استخدام جلسة لمعالجة الاستمرارية البيانات. |
يقدم Spring Boot إصدارات التطبيق الاعتماد. spring-boot-starter-data-jpa لإتاحة استخدام قاعدة البيانات العلاقية بفعالية في تطبيق Spring Boot. يستخدم spring-boot-starter-data-jpa إصدار spring-boot-jpa كإعتماد داخلي.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> <version>2.2.2.RELEASE</version> </dependency>
ننشئ تطبيق Spring Boot يستخدم JPA للتواصل مع قاعدة البيانات. في المثال التالي، نستخدم قاعدة بيانات ذاكرة العشوائية. Apache Derby.
Apache Derby : وهي مدمجةبرمجيات مفتوحة المصدرتم تطوير قاعدة البيانات العلاقية بالكامل باستخدام Java. يمكن الحصول عليها تحت رخصة Apache License 2.0. تتوفر مميزات Apache Derby التالية:
سهل التثبيت، التوزيع واستخدام.يستند هذا البرنامج إلى معايير Java، JDBC وSQL.يقدم هذا البرنامج التطبيقي جهاز التوجيه المدمج JDBC، مما يسمح لنا بإدراج Derby في أي حلقة تقنية تعتمد على Java.إنه يدعم أيضًا نموذج العميل/الخادم من خلال محرك JDBC لـ Derby Network Client وـ Derby Network Server.
يمكن لـ Spring Boot تكوين قواعد البيانات المدمجة تلقائيًا، مثل H2،HSQL،و قواعد بيانات Derby . لا نحتاج إلى تقديم أي عنوان URL للإتصال. نحتاج فقط إلى تضمين بناء الإعتماد للقاعدة المدمجة التي نستخدمها.
في Spring Boot، بما أننا نضيف فقط في pom، Derby إضافة إعتماد سيجعل إدخال قاعدة بيانات Apache Derby ممكنًا بسهولة. ملف xml.
<dependency> <groupId>org.apache.derby</groupId> <artifactId>derby</artifactId> <scope>runtime</scope> </dependency>
الخطوة 1: افتح Spring Initializr https://start.spring.io/
الخطوة 2: اختر أحدث إصدار من Spring Boot 2.3.0(SNAPSHOT)
الخطوة 3: توفيرGroupالاسم. قمنا بتوفير com.w3codebox
الخطوة 4: توفيرArtifact الرقم. قمنا بتوفير apache-derby-example .
الخطوة 5: إضافة إعتمادات: Spring Web،Spring Data JPAو قاعدة بيانات Apache Derby.
الخطوة 6: انقر إنشاء (إنشاء) الزر. عند النقر على زر "إنشاء"، سيقوم بتعليب المشروع في ملف Jar وسيتم تثبيته على النظام المحلي.
الخطوة 7: استخراج ملف Jar وافتحه في منطقة العمل STS.
الخطوة 8: استيراد
ملف-> استيراد-> مشروع Maven موجود-> استعراض-> اختر مجلد apache-derby-example-> اكتمال
استيراد سيستغرق بعض الوقت.
الخطوة 9: في مجلد src/main/javaفي إنشاء اسم com.w3codebox.model الحزمة.
الخطوة 10: في حزمة com.w3codebox.model في إنشاء اسم UserRecord الكلاس، ثم اتبع ما يلي:
تعريف ثلاث متغيرات id، الاسم، والبريد الإلكتروني.إنشاء getter وsetter.
انقر بزر الماوس الأيمن على الملف-> المصدر-> إنشاء getter وsetter تعريف بناءً افتراضيًا.استخدام التسميات @Entity سيجعل الكلاس علامةً أساسيةً.Entity. استخدام التسميات @Id سي Id العلامة الأساسية.
UserRecord.java
package com.w3codebox.model; import javax.persistence.Entity; import javax.persistence.Id; @Entity public class UserRecord { @Id private int id; private String name; private String email; //مكون افتراضي 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: في في مجلد src/main/java أنشئ ملفاً باسم com.w3codebox.controller الحزمة.
الخطوة 12: في حزمة com.w3codebox.controller في إنشاء اسم مدير المستخدم كلاس Controller الخاص بـ
استخدام التسميات @RestController وضع العلامة على الكلاس كمسؤول.استخدام التسميات @Autowired النوع التلقائي للتواصل مع الكلاس UserService .لقد قمنا بتعريف خرياطتين، خريطة واحدة تستخدمالحصول على جميع المستخدمين، والخرائطة الأخرى تستخدمإضافة المستخدم.
UserController.java
package com.w3codebox.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.w3codebox.model.UserRecord; import com.w3codebox.service.UserService; import java.util.List; @RestController public class UserController { @Autowired private UserService userService; @RequestMapping("/") public List<UserRecord> getAllUser(); { return userService.getAllUsers(); } @RequestMapping(value="/add-user", method=RequestMethod.POST) public void addUser(@RequestBody UserRecord userRecord) { userService.addUser(userRecord); } }
الخطوة 13: في مجلد أنشئ ملفًا في src/main/java باسم com.w3codebox.service الحزمة.
الخطوة 14: في حزمة com.w3codebox.service في إنشاء اسم مدير المستخدم أداء عملية التالي:
باستخدام النقطة @Serviceعلم هذا الكائن كخدمة. الربط التلقائي UserRepository تحديد عملية getAllUsers();،والمعطيات التالية هي قائمة: تحديد اسم آخر للقاعدة addUser();،للحفاظ على سجلات المستخدمين.
UserService.java
package com.w3codebox.service; import java.util.List; import java.util.ArrayList; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.w3codebox.model.UserRecord; import com.w3codebox.repository.UserRepository; @Service public class UserService { @Autowired private UserRepository userRepository; public List<UserRecord> getAllUsers(); { List<UserRecord>userRecords = new ArrayList<>(); userRepository.findAll().forEach(userRecords::add); return userRecords; } public void addUser(UserRecord userRecord) { userRepository.save(userRecord); } }
الخطوة 15: في مجلد src/main/javaفي إنشاء اسم com.w3codebox.repository الحزمة.
الخطوة 16: في حزمة com.w3codebox.repository في إنشاء اسم UserRepository واجهة التخزين، وتوسيع CrudRepository .
UserRepository.java
package com.w3codebox.repository; import org.springframework.data.repository.CrudRepository; import com.w3codebox.model.UserRecord; public interface UserRepository extends CrudRepository<UserRecord, String> { }
الخطوة 17: الآن، افتح ApacheDerbyExampleApplication.java ملف. إنه تم إنشاؤه بشكل افتراضي عند إعداد التطبيق.
ApacheDerbyExampleApplication.java
package com.w3codebox; 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/. نظرًا لأن لم يتم إضافة أي مستخدم إلى القائمة، فإنه يعود ب قائمة فارغة.
لإضافة المستخدم إلى قاعدة البيانات، سنستخدمإرسال POST طلب Postman.
خطوة 20: افتحPostman، ثم اتبع الخطوات التالية:
اختر POST تقوم بتشغيل URL http://localhost:8080/add-user.نقرجسم اختر Content-Type كJSON (application/json).أدخل البيانات التي ستتم إدراجها في قاعدة البيانات. قمنا بإدراج البيانات التالية:
{ "id": "001", "name": "Tom", "email": "[email protected]" }
نقرإرسالزر.
عندما ننقر على زر "إرسال"، فإنه يظهرالحالة: 200 OK . هذا يعني أن الطلب تم تنفيذه بنجاح.
خطوة 21: افتح متصفح الويب وقم بتشغيل URL http://localhost:8080. إنه يعود ب المستخدمين الذين قمنا ب إدراجهم في قاعدة البيانات.