معايير اى بي آي في جي بي آي 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
فئات الخدمة
تحتوي هذه الوحدة على فئات الخدمة ، والتي تنفذ جزء استعلام المعايير باستخدام تهيئة واجهة برمجة تطبيقات 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
التسميات: JPA