JPA - Kriterien API


Advertisements

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

Geschichte der Kriterien API

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.

Kriterien Suchstruktur

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.

Beispiel von Kriterien API

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 von Entitäten

Erstellen Sie ein Paket mit dem Namen com.tutorialspoint.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.tutorialspoint.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 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.tutorialspoint.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>

Service-Klassen

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.tutorialspoint.eclipselink.service' . Die Klasse mit dem Namen CriteriaAPI.java ist unter den gegebenen Paket erstellt. Die DAO-Klasse wird wie folgt dargestellt:

package com.tutorialspoint.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.tutorialspoint.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
Advertisements