الاثنين، 11 نوفمبر 2019

مدراء الكيانات جي بي آي JPA - Entity Managers

مدراء الكيانات جي بي آي JPA - Entity Managers

مدراء الكيانات جي بي آي JPA - Entity Managers

يأخذك هذا الفصل في مثال بسيط مع JPA.  لننظر في إدارة الموظفين كمثال.  وهذا يعني أن إدارة الموظفين تقوم بإنشاء وتحديث وإيجاد وحذف موظف.  كما ذكر أعلاه ، نحن نستخدم قاعدة بيانات MySQL لعمليات قاعدة البيانات.

 الوحدات الرئيسية لهذا المثال هي كما يلي:

 نموذج أو POJO

 Employee.java

 Persistence سنتفق على تسميته بالاستمرار او الثبات.

 Persistence.xml

 خدمة Service

 CreatingEmployee.java

 UpdatingEmployee.java

 FindingEmployee.java

 DeletingEmployee.java

لنأخذ التسلسل الهرمي للحزمة التي استخدمناها في تثبيت JPA مع Eclipselink.  اتبع التسلسل الهرمي لهذا المثال على النحو التالي:


إنشاء الكيانات
 الكيانات ليست سوى حبوب أو نماذج ، في هذا المثال ، سنستخدم الموظف ككيان.  العيد ،  eid, ename, salary,  deg هي سمات هذا الكيان.  أنه يحتوي على منشئ الافتراضية ، وطريقة setter تلك السمات.

 في التسلسل الهرمي الموضح أعلاه ، قم بإنشاء حزمة باسم "com.tutorialspoint.eclipselink.entity" ، ضمن حزمة "المصدر".  قم بإنشاء فصل باسم Employee.java ضمن الحزمة المحددة كما يلي:


package com.tutorialspoint.eclipselink.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table
public class Employee {

   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)  
   
   private int eid;
   private String ename;
   private double salary;
   private String deg;
   
   public Employee(int eid, String ename, double salary, String deg) {
      super( );
      this.eid = eid;
      this.ename = ename;
      this.salary = salary;
      this.deg = deg;
   }

   public Employee( ) {
      super();
   }

   public int getEid( ) {
      return eid;
   }
   
   public void setEid(int eid) {
      this.eid = eid;
   }
   
   public String getEname( ) {
      return ename;
   }
   
   public void setEname(String ename) {
      this.ename = ename;
   }

   public double getSalary( ) {
      return salary;
   }
   
   public void setSalary(double salary) {
      this.salary = salary;
   }

   public String getDeg( ) {
      return deg;
   }
   
   public void setDeg(String deg) {
      this.deg = deg;
   }
   
   @Override
   public String toString() {
      return "Employee [eid=" + eid + ", ename=" + ename + ", salary=" + salary + ", deg=" + deg + "]";
   }
}

في التعليمة البرمجية أعلاه ، استخدمنا التعليق التوضيحيEntity لإنشاء فئة POJO ككيان.

 قبل الانتقال إلى الوحدة التالية ، نحتاج إلى إنشاء قاعدة بيانات للكيان العلائقي ، والتي ستسجل قاعدة البيانات في ملف persistence.xml.  افتح MySQL workbench واكتب الاستعلام كما يلي:

create database jpadb
use jpadb

Persistence.xml
 تلعب هذه الوحدة دورًا مهمًا في مفهوم JPA.  في ملف xml هذا ، سنقوم بتسجيل قاعدة البيانات وتحديد فئة الكيان.

 في التسلسل الهرمي للحزمة الموضح أعلاه ، يكون persistence.xml ضمن حزمة محتوى JPA كما يلي:

xml version="1.0" encoding="UTF-8"?>

 version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
   http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
   
    name="Eclipselink_JPA" transaction-type="RESOURCE_LOCAL">
   
      com.devloper.eclipselink.entity.Employee
name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jpadb"/> name="javax.persistence.jdbc.user" value="root"/> name="javax.persistence.jdbc.password" value="root"/> name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> name="eclipselink.logging.level" value="FINE"/> name="eclipselink.ddl-generation" value="create-tables"/>

في xml أعلاه ، يتم تعريف العلامة باسم محدد لاستمرار JPA.  تحدد العلامة فئة الكيان باسم الحزمة.  تحدد العلامة جميع الخصائص ، وتعرف العلامة كل خاصية مثل تسجيل قاعدة البيانات ومواصفات عنوان URL واسم المستخدم وكلمة المرور.  هذه هي خصائص Eclipselink.  سيقوم هذا الملف بتكوين قاعدة البيانات.

 عمليات الثبات persistence 
 تستخدم عمليات المثابرة مقابل قاعدة البيانات وهي عمليات التحميل والتخزين.  في أحد مكونات الأعمال ، تندرج جميع عمليات الثبات persistence  في فصول الخدمة.

 في التسلسل الهرمي للحزمة الموضح أعلاه ، قم بإنشاء حزمة باسم "com.developer.eclipselink.service" ، ضمن حزمة 'src' (المصدر).  جميع فئات الخدمة المسماة CreateEmloyee.java و UpdateEmployee.java و FindEmployee.java و DeleteEmployee.java.  يأتي ضمن الحزمة المعطاة كما يلي:

 إنشاء موظف
 إنشاء فئة الموظف المسمى CreateEmployee.java كما يلي:
package com.tutorialspoint.eclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.tutorialspoint.eclipselink.entity.Employee;

public class CreateEmployee {

   public static void main( String[ ] args ) {
   
      EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
      
      EntityManager entitymanager = emfactory.createEntityManager( );
      entitymanager.getTransaction( ).begin( );

      Employee employee = new Employee( ); 
      employee.setEid( 1201 );
      employee.setEname( "Gopal" );
      employee.setSalary( 40000 );
      employee.setDeg( "Technical Manager" );
      
      entitymanager.persist( employee );
      entitymanager.getTransaction( ).commit( );

      entitymanager.close( );
      emfactory.close( );
   }
}

في التعليمة البرمجية أعلاه ، ينشئ createEntityManagerFactory () وحدة استمرارية من خلال توفير نفس الاسم الفريد الذي نوفره لوحدة الثبات في ملف persistent.xml.  سينشئ كائن الكيانmanagerfactory مثيل الكيان باستخدام طريقة createEntityManager ().  ينشئ كائن مدير الكيان مثيل معاملة كيان لإدارة المعاملة.  باستخدام كائن مدير الكيان ، يمكننا استمرار الكيانات في قاعدة البيانات.

 بعد تجميع وتنفيذ البرنامج أعلاه ، سوف تحصل على إشعارات من مكتبة eclipselink على لوحة وحدة التحكم من eclipse IDE.

 للنتيجة ، افتح منضدة عمل MySQL واكتب الاستعلامات التالية.

use jpadb
select * from employee

سيتم عرض جدول قاعدة البيانات المؤثر باسم الموظف employee بتنسيق جدولي كما يلي:

EidEnameSalaryDeg
1201Gopal40000Technical Manager

Update Employee تحديث الموظف

 لتحديث الموظف ، نحتاج إلى الحصول على قاعدة بيانات نموذج السجل وإجراء التغييرات والالتزام بها أخيرًا.  يتم عرض الفئة المسماة UpdateEmployee.java على النحو التالي
package com.tutorialspoint.eclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.tutorialspoint.eclipselink.entity.Employee;

public class UpdateEmployee {
   public static void main( String[ ] args ) {
      EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
      
      EntityManager entitymanager = emfactory.createEntityManager( );
      entitymanager.getTransaction( ).begin( );
      Employee employee = entitymanager.find( Employee.class, 1201 );
      
      //before update
      System.out.println( employee );
      employee.setSalary( 46000 );
      entitymanager.getTransaction( ).commit( );
      
      //after update
      System.out.println( employee );
      entitymanager.close();
      emfactory.close();
   }
}

بعد تجميع وتنفيذ البرنامج أعلاه ، سوف تحصل على إشعارات من مكتبة Eclipselink على لوحة وحدة التحكم من eclipse IDE.

 للنتيجة ، افتح منضدة عمل MySQL واكتب الاستعلامات التالية.
use jpadb
select * from employee

سيتم عرض جدول قاعدة البيانات المؤثر باسم الموظف بتنسيق جدولي كما يلي:

EidEnameSalaryDeg
1201Gopal46000Technical Manager
تم تحديث راتب الموظف ، 1201 إلى 46000.

  Find Employee البحث عن موظف
 للعثور على موظف ، سنحصل على سجل من قاعدة البيانات ونعرضه.  في هذه العملية ، لا تشارك EntityTransaction ، ولا يتم تطبيق أي معاملة أثناء استرداد السجل.

 الفئة المسماة FindEmployee.java كما يلي.

package com.tutorialspoint.eclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.tutorialspoint.eclipselink.entity.Employee;

public class FindEmployee {
   public static void main( String[ ] args ) {
   
      EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
      EntityManager entitymanager = emfactory.createEntityManager();
      Employee employee = entitymanager.find( Employee.class, 1201 );

      System.out.println("employee ID = " + employee.getEid( ));
      System.out.println("employee NAME = " + employee.getEname( ));
      System.out.println("employee SALARY = " + employee.getSalary( ));
      System.out.println("employee DESIGNATION = " + employee.getDeg( ));
   }
}

بعد تجميع وتنفيذ البرنامج أعلاه ، ستحصل على الإخراج من مكتبة Eclipselink على لوحة التحكم في eclipse IDE كما يلي:
employee ID = 1201
employee NAME = Gopal
employee SALARY = 46000.0
employee DESIGNATION = Technical Manager


 Delete Employee حذف الموظف
 لحذف موظف ، سنجد أولاً السجل ثم نحذفه.  هنا EntityTransaction تلعب دورا هاما.

 الفئة المسماة DeleteEmployee.java كما يلي:
package com.tutorialspoint.eclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.tutorialspoint.eclipselink.entity.Employee;

public class DeleteEmployee {
   public static void main( String[ ] args ) {
   
      EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
      EntityManager entitymanager = emfactory.createEntityManager( );
      entitymanager.getTransaction( ).begin( );
      
      Employee employee = entitymanager.find( Employee.class, 1201 );
      entitymanager.remove( employee );
      entitymanager.getTransaction( ).commit( );
      entitymanager.close( );
      emfactory.close( );
   }
}


بعد تجميع وتنفيذ البرنامج أعلاه ، سوف تحصل على إشعارات من مكتبة Eclipselink على لوحة وحدة التحكم من eclipse IDE.

 للنتيجة ، افتح منضدة عمل MySQL واكتب الاستعلامات التالية.
use jpadb
select * from employee

سيكون لدى قاعدة البيانات المرسلة باسم الموظف سجلات فارغة.

 بعد الانتهاء من جميع الوحدات في هذا المثال ، يتم عرض التسلسل الهرمي للملفات والملفات كما يلي:





التسميات: