الجمعة، 15 نوفمبر 2019

معايير اى بي آي في جي بي آي JPA - Criteria API

معايير اى بي آي في جي بي آي JPA - Criteria API

معايير اى بي آي في جي بي آي JPA - Criteria API


واجهة برمجة تطبيقات المعايير هي واجهة برمجة تطبيقات معرفة مسبقًا تستخدم لتحديد استعلامات الكيانات.  إنها الطريقة البديلة لتعريف استعلام JPQL.  هذه الاستعلامات آمنة من حيث النوعية ومحمولة وسهلة التعديل عن طريق تغيير بناء الجملة.  على غرار JPQL ، يتبع المخطط التجريدي (سهل تحرير المخطط) والكائنات المدمجة.  تختلط واجهة برمجة تطبيقات بيانات التعريف بمعايير API لنمذجة الكيان المستمر لاستعلامات المعايير.

 الميزة الرئيسية لمعايير API هي أنه يمكن اكتشاف الأخطاء في وقت مبكر أثناء وقت الترجمة.  استعلامات JPQL المستندة إلى سلسلة والاستعلامات المستندة إلى معايير JPA هي نفسها في الأداء والكفاءة.

 تاريخ المعايير API
 يتم تضمين API للمعايير في جميع إصدارات JPA ، وبالتالي يتم إخطار كل خطوة من خطوات API في مواصفات JPA.

 في JPA 2.0 ، يتم تطوير واجهة برمجة تطبيقات استعلام المعايير ، وتوحيد الاستعلامات.
 في JPA 2.1 ، يتم تضمين معايير التحديث والحذف (التحديث الشامل والحذف).
 
هيكل معايير الاستعلام
 يرتبط كل من API Criteria و JPQL ارتباطًا وثيقًا ويسمح لهما بالتصميم باستخدام عوامل تشغيل مماثلة في استفساراتهم.  يتبع حزمة javax.persistence.criteria لتصميم استعلام.  بنية الاستعلام تعني استعلام معايير بناء الجملة.

 يُرجع استعلام المعايير البسيطة التالي جميع مثيلات فئة الكيان في مصدر البيانات.

EntityManager em = ...;
CriteriaBuilder cb = em.getCriteriaBuilder();

CriteriaQuery<Entity class> cq = cb.createQuery(Entity.class);
Root<Entity> from = cq.from(Entity.class);

cq.select(Entity);
TypedQuery<Entity> q = em.createQuery(cq);
List<Entity> allitems = q.getResultList();

يوضح الاستعلام الخطوات الأساسية لإنشاء معايير.

 يتم استخدام مثيل EntityManager لإنشاء كائن CriteriaBuilder.
 يتم استخدام مثيل CriteriaQuery لإنشاء كائن استعلام.  سيتم تعديل سمات كائن الاستعلام مع تفاصيل الاستعلام.
 يتم استدعاء الأسلوب CriteriaQuery.from لتعيين جذر الاستعلام.
 يتم استدعاء CriteriaQuery.select لتعيين نوع قائمة النتائج.
 يتم استخدام مثيل TypedQuery لإعداد استعلام للتنفيذ وتحديد نوع نتيجة الاستعلام.
 أسلوب getResultList على كائن TypedQuery لتنفيذ استعلام.  إرجاع هذا الاستعلام مجموعة من الكيانات ، يتم تخزين النتيجة في قائمة.
 مثال لمعايير API
 دعونا ننظر في مثال قاعدة بيانات الموظف.  لنفترض أن جدول jpadb.employee يحتوي على السجلات التالية:

Eid Ename           Salary Deg
401 Gopal         40000 Technical Manager
402 Manisha         40000 Proof reader
403 Masthanvali     35000 Technical Writer
404     Satish         30000 Technical writer
405 Krishna         30000 Technical Writer
406 Kiran         35000 Proof reader

إنشاء مشروع JPA في الكسوف IDE المسمى JPA_Eclipselink_Criteria.  جميع وحدات هذا المشروع موضحة كالتالي:

 إنشاء الكيانات
 قم بإنشاء حزمة باسم com.ahmedalmahallawi.eclipselink.entity ضمن الحزمة 'src'.

 قم بإنشاء فصل باسم Employee.java ضمن الحزمة المحددة.  يظهر كيان الموظف في الفصل على النحو التالي:

Create a class named Employee.java under given package. The class Employee entity is shown as follows:
package com.ahmedalmahallawi.eclipselink.entity;

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

@Entity
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 + "]";
   }
}

Persistence.xml
 مطلوب ملف Persistence.xml لتكوين قاعدة البيانات وتسجيل فئات الكيانات.

 سيتم إنشاء Persistence.xml بواسطة الكسوف IDE أثناء عمل مشروع JPA.  تفاصيل التكوين هي مواصفات المستخدم.  يتم عرض ملف persistence.xml كما يلي:

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.ahmedalmahallawi.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"/>

فئات الخدمة
 تحتوي هذه الوحدة على فئات الخدمة ، والتي تنفذ جزء استعلام المعايير باستخدام تهيئة واجهة برمجة تطبيقات MetaData.  قم بإنشاء حزمة باسم "com.ahmedalmahallawi.eclipselink.service".  يتم إنشاء الفئة المسماة CriteriaAPI.java ضمن الحزمة المحددة.  يتم عرض فئة DAO كالتالي:

package com.ahmedalmahallawi.eclipselink.service;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;

import com.ahmedalmahallawi.eclipselink.entity.Employee;

public class CriteriaApi {
   public static void main(String[] args) {
   
   EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
   EntityManager entitymanager = emfactory.createEntityManager( );
   CriteriaBuilder criteriaBuilder = entitymanager.getCriteriaBuilder();
   CriteriaQuery<Object> criteriaQuery = criteriaBuilder.createQuery();
   Root<Employee> from = criteriaQuery.from(Employee.class);

   //select all records
   System.out.println(“Select all records”);
   CriteriaQuery<Object> select = c riteriaQuery.select(from);
   TypedQuery<Object> typedQuery = entitymanager.createQuery(select);
   List<Object> resultlist = typedQuery.getResultList();

   for(Object o:resultlist) {
      Employee e = (Employee)o;
      System.out.println("EID : " + e.getEid() + " Ename : " + e.getEname());
   }

   //Ordering the records 
   System.out.println(“Select all records by follow ordering”);
   CriteriaQuery<Object> select1 = criteriaQuery.select(from);
   select1.orderBy(criteriaBuilder.asc(from.get("ename")));
   TypedQuery<Object> typedQuery1 = entitymanager.createQuery(select);
   List<Object> resultlist1 = typedQuery1.getResultList();

   for(Object o:resultlist1){
      Employee e=(Employee)o;
      System.out.println("EID : " + e.getEid() + " Ename : " + e.getEname());
   }

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

بعد تجميع وتنفيذ البرنامج أعلاه ، سوف تحصل على الإخراج في لوحة التحكم في Eclipse IDE على النحو التالي:

Select All records
EID : 401 Ename : Gopal
EID : 402 Ename : Manisha
EID : 403 Ename : Masthanvali
EID : 404 Ename : Satish
EID : 405 Ename : Krishna
EID : 406 Ename : Kiran
Select All records by follow Ordering
EID : 401 Ename : Gopal
EID : 406 Ename : Kiran
EID : 405 Ename : Krishna
EID : 402 Ename : Manisha
EID : 403 Ename : Masthanvali
EID : 404 Ename : Satish





التسميات: