15
Java Persistence Query Language Zühl, Kühle WS 08/09 JPQL Java Persistence Query Language Cornelius Zühl Arend Kühle Komponentenarchitektur WS 08/09

JPQL Java Persistence Query Language

Embed Size (px)

DESCRIPTION

JPQL Java Persistence Query Language. Cornelius Zühl Arend Kühle Komponentenarchitektur WS 08/09. Java Persistence API JPA. import javax.persistence Persistence Entity Objektrelationale Metadaten Java-Annotationen oder XML-Datei Java Persistence Query Language (JPQL) - PowerPoint PPT Presentation

Citation preview

Page 1: JPQL Java Persistence Query Language

Java Persistence Query Language Zühl, Kühle WS 08/09

JPQLJava Persistence Query Language

Cornelius Zühl

Arend Kühle

Komponentenarchitektur WS 08/09

Page 2: JPQL Java Persistence Query Language

Java Persistence Query Language Zühl, Kühle WS 08/09

Java Persistence APIJPA

import javax.persistence

• Persistence Entity

• Objektrelationale Metadaten– Java-Annotationen oder XML-Datei

• Java Persistence Query Language (JPQL)– ähneln syntaktisch SQL-Abfragen– bezieht sich auf Entitäten

Page 3: JPQL Java Persistence Query Language

Java Persistence Query Language Zühl, Kühle WS 08/09

Java Persistence APIJPA

EntityManager

JPQLQuery API

Objektoperationenfind merge persist update remove

Entity

persistance.xml

Oracle TopLink

Hibernate

Page 4: JPQL Java Persistence Query Language

Java Persistence Query Language Zühl, Kühle WS 08/09

JPQL Syntax

Erweitert um Objektorientierte Befehleis empty, is null, not …

select u from User u

Query

SQL Syntaxkriterien werden genutztand or < > = <= <> ( )

select u.name from User u where (u.age > 18 and u.age <= 65) or u.age = 83

Page 5: JPQL Java Persistence Query Language

Java Persistence Query Language Zühl, Kühle WS 08/09

JPQL Statement

Query q = em.createQuery („select u from User u"); List<User> userList = q.getResultList();

Query q = em.createQuery ("delete u from User u where u.name = ‘Busch‘ ");int deleted = q.executeUpdate();

Query q = em.createQuery ("update User u set u.name = ‘Max‘ where u.name = ‘Moritz‘");int updated = q.executeUpdate();

select update delete

JPQL Statement

Page 6: JPQL Java Persistence Query Language

Java Persistence Query Language Zühl, Kühle WS 08/09

Datenabfrage

Query API

Primary Key

JPQL

Query

NamedQuery

NativeQuery

EntityManager em;em.find(...);

q = em.createQuery(...)

Query q;

q = em.createNativeQuery(...)

q = em.createNamedQuery(...)

EntityManager

Datenabfrage

Page 7: JPQL Java Persistence Query Language

Java Persistence Query Language Zühl, Kühle WS 08/09

JPQL Funktionenselect u from User u where concat(u.name, 's') = 'Walters'

select u from User u where substring(u.name, 1, 1) = 'W'

select u from User u where trim(leading 'a' FROM u.name) = 'W'

select u from User u where lower(u.name) = 'walter'

select u from User u where upper(u.name) = 'WALTER'

select u from User u where length(u.name) = 6

select u from User u where locate('a', u.name) = 2

select u from User u where abs(u.age) >= 5.00

select u from User u where sqrt(u.age) >= 1000

select u from User u where mod(u.age, 10) = 0

Page 8: JPQL Java Persistence Query Language

Java Persistence Query Language Zühl, Kühle WS 08/09

Aggregatsfunktionen

• MIN, MAX, AVG, COUNT und SUM

Query q = em.createQuery("select min(u.age), max(u.age), avg(u.age),

sum(u.age) from User u”);

Object[] stats = (Object[]) q.getSingleResult();

Page 9: JPQL Java Persistence Query Language

Java Persistence Query Language Zühl, Kühle WS 08/09

Polimorphische Queries

Fiat Opel Renault

Auto

Query q = em.createQuery („select a from Auto a where a.price < 10000"); List<User> autoList = q.getResultList();

Page 10: JPQL Java Persistence Query Language

Java Persistence Query Language Zühl, Kühle WS 08/09

Prepared Statements

em.createQuery("select u from User u where name = " +name+ " and age > " +age);

public List<User> findUsers(String name, int age) { Query q = em.createQuery(" Select u from User u where name = :name and age > :age"); q.setParameter("name", name); q.setParameter("age", age); return List<User> users = q.getResultList();}

public User findUserByAddress(Address address) { Query q = em.createQuery(" select u from User u where u.address = :address "); q.setParameter(„address", adedress); return q.getSingleResult();}

public List<User> findUsers(String name, int age) { Query q = em.createQuery(" select u from User u where name = ?1 and age > ?2"); q.setParameter(1, name); q.setParameter(2, age); return List<User> users = q.getResultList();}

Entity Object

Page 11: JPQL Java Persistence Query Language

Java Persistence Query Language Zühl, Kühle WS 08/09

Begrenzen der Ergebnismenge

Query q = em.createQuery("select u from User u");q.setFirstResult(30);q.setMaxResults(10);List<User> users = q.getResultList();

public List<User> findUsers(int firstRow, int maxResults) { Query q = em.createQuery("select u from User u"); q.setFirstResult(firstRow); q.setMaxResults(maxResults); return List<User> users = q.getResultList();}

Page 12: JPQL Java Persistence Query Language

Java Persistence Query Language Zühl, Kühle WS 08/09

Konkrete Datenstatt komplette Objekte

Query q = em.createQuery("select u.id, u.name from User u");List<Object[]> result = q.getResultList();List<User> users = new ArrayList<User>(result.size());for(Object[] objAr : result){ Long userId = objAr[0]; String userName = objAr[1]; User u = new User(); u.setUserId(userId); u.setUserName(userName); users.add(u);}

public class User { public User(String id, String name) { this.id = id; this.name = name;}}

Query q = em.createQuery("select new User(u.id, u.name) from User u");List<User> result = q.getResultList();

Page 13: JPQL Java Persistence Query Language

Java Persistence Query Language Zühl, Kühle WS 08/09

Named Queries@Entity()@NamedQuery (name=„findAllUsers", query="select u from User u")public class User { // ...}

@Entity()@NamedQuerys ({ @NamedQuery (name=„findAllUsers", query="select u from User u"), @NamedQuery (name=„findAdults", query="select u from User u where age > 17"), @NamedQuery (name=„getAverageAge", query="select avg(u.age) from User u")})public class User { // ...}

public List<User> getUser() { Query query = em.createNamedQuery("findAllUsers");// Query query = em.createNamedQuery("User.findAllUsers"); List<User> userList = query.getResultList(); return userList;}

Page 14: JPQL Java Persistence Query Language

Java Persistence Query Language Zühl, Kühle WS 08/09

Exception Handling

getSingleResult()

javax.persistence.NoResultException

javax.persistence.NoneUniqueResultException

java.lang.IllegalStateException

getResultList()

java.lang.IllegalStateException

Page 15: JPQL Java Persistence Query Language

Java Persistence Query Language Zühl, Kühle WS 08/09

Und nun zur Praxis

Vorführung• Tools• Queries• Tipps

Quellen• http://edocs.bea.com/kodo/docs41/full/html/ejb3_overview_query.html• http://java.sun.com/mailers/techtips/enterprise/2006/TechTips_Oct06.html• http://javathreads.de/2008/04/jpa-mit-hibernate-einfuehrung/• http://www.kunkelgmbh.de/jpa/