Kriterien ist eine vordefinierte API, die verwendet wird, um Abfragen für Entitäten definieren. Es ist eine alternative Möglichkeit der Definition einer JPQL Abfrage. Diese Abfragen sind typsicher, tragbar und einfach zu modifizieren durch wechselnden, die Syntax. Ähnlich zu JPQL, es folgt eine abstrakte Schema (leicht zu bearbeiten Schema) und eingebettete Objekte. Die Metadaten-API wird mit Kriterien API vermischt zu persistente modell Entität für Kriterien Abfragen.
Der große Vorteil ist von Kriterien API ist dass Fehler können früher während der Kompilierung festgestellt werden. String-basierte JPQL Abfragen und JPA Kriterien basierte Abfragen sind gleich in Leistung und Effizienz
Die Kriterien ist umfasst in allen Versionen von JPA daher jeder Schritt der Kriterien wird in den Spezifikationen des JPA benachrichtigt.
In JPA 2.0, die Kriterien Abfrage-API, die Standardisierung der Fragen entwickelt werden.
In JPA 2.1 Kriterien aktualisieren und löschen (Schütt aktualisieren und löschen) sind enthalten.
Die Kriterien und die JPQL sind eng miteinander verbunden und dürfen zu entwerfen mit ähnlichen Betreiber in ihre Abfragen. Daraus folgt, javax.persistence.criteria -Paket, um eine Abfrage zu entwerfen. Die Abfrage Struktur Mittel die Syntax Kriterien Abfrage.
Die folgende einfache Kriterien Abfrage gibt alle Instanzen des Entity-Klasse in der Datenquelle.
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();
Die Abfrage demonstriert die grundlegenden Schritte, um eine Kriterien erstellen.
EntityManager -Instanz wird verwendet, um ein Objekt zu erstellen CriteriaBuilder.
CriteriaQuery -Instanz wird verwendet, um eine Abfrage-Objekt erstellen. Attribute dieses Query-Objekt wird mit den Details der Abfrage geändert werden.
CriteriaQuery.form -Methode aufgerufen wird, um die Abfrage root.
CriteriaQuery.select wird aufgerufen, um die Ergebnisliste Typ festzulegen.
TypedQuery<T> -Instanz wird verwendet, um eine Abfrage für die Ausführung vorzubereiten und die den Typ des Abfrageergebnisses
getResultList Methode auf dem TypedQuery<T> Aufgabe, eine Abfrage auszuführen. Diese Abfrage gibt eine Auflistung von Einheiten, wird das Ergebnis in einer Liste gespeichert.
lassen Sie uns Betrachten wir das Beispiel der Mitarbeiterdatenbank. lassen Sie uns Nehmen wir an, die jpadb.employee Tabelle enthält folgende Aufzeichnungen:
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
Erstellen Sie eine JPA-Projekt in der Eclipse-IDE mit dem Namen JPA_Eclipselink_Criteria . Alle Module dieses Projektes werden im Folgenden erörtert:
Erstellen Sie ein Paket mit dem Namen com.howcodex.eclipselink.entity unter 'src' -Paket.
Erstellen Sie eine Klasse mit dem Namen Employee.java unter gegebenen Paket. Die Klasse Employee-Entität wird wie folgt dargestellt:
package com.howcodex.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 Datei ist wie folgt:
<?xml version="1.0" encoding="UTF-8"?> <persistence 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"> <persistence-unit name="Eclipselink_JPA" transaction-type="RESOURCE_LOCAL"> <class>com.howcodex.eclipselink.entity.Employee</class> <properties> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jpadb"/> <property name="javax.persistence.jdbc.user" value="root"/> <property name="javax.persistence.jdbc.password" value="root"/> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> <property name="eclipselink.logging.level" value="FINE"/> <property name="eclipselink.ddl-generation" value="create-tables"/> </properties> </persistence-unit> </persistence>
Dieses Modul enthält die Serviceklassen, die die Kriterien Abfrage Teil mit Hilfe der Metadaten-API-Initialisierung implementiert. Erstellen Sie ein Paket mit dem Namen 'com.howcodex.eclipselink.service' . Die Klasse mit dem Namen CriteriaAPI.java ist unter den gegebenen Paket erstellt. Die DAO-Klasse wird wie folgt dargestellt:
package com.howcodex.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.howcodex.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 =criteriaQuery.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( ); } }
Nach dem Kompilieren und Ausführen des Programms werden Sie über die folgende Ausgabe in der Konsole Panel von Eclipse-IDE zu bekommen.
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