Está en la página 1de 18

www.globalmentoring.com.

mx
Crear un proyecto para poner en práctica las consultas con el
API de Criteria. Al finalizar deberemos observar lo siguiente:

www.globalmentoring.com.mx
En caso que no tengamos abierto el proyecto sga-jee lo
abrimos (la última versión):

www.globalmentoring.com.mx
En caso que no tengamos abierto el proyecto sga-jee lo
abrimos:

www.globalmentoring.com.mx
Esperamos a que cargue completamente el proyecto. En caso que marque error el
proyecto, hacemos un Clean & Build para que se muestren todos los archivos, este
paso es opcional:

www.globalmentoring.com.mx
Copiamos el proyecto para ponerlo en la nueva ruta:

www.globalmentoring.com.mx
Copiamos el proyecto para ponerlo en la nueva ruta:

www.globalmentoring.com.mx
Cerramos el proyecto anterior y dejamos solo el nuevo:

www.globalmentoring.com.mx
Creamos una clase para probar las consultas con el API de
Criteria:

www.globalmentoring.com.mx
Creamos la clase PruebaApiCriteria:

www.globalmentoring.com.mx
Archivo PruebaApiCriteria.java: Clic para descargar código
package mx.com.gm.sga.cliente.criteria;

import java.util.ArrayList;
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.ParameterExpression;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import mx.com.gm.sga.domain.Persona;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class PruebaApiCriteria {

static Logger log = LogManager.getRootLogger();

public static void main(String[] args) {

EntityManagerFactory emf = Persistence.createEntityManagerFactory("ConsolaJpqlPU");


EntityManager em = emf.createEntityManager();

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Persona> criteriaQuery = null;
Root<Persona> fromPersona = null;
TypedQuery<Persona> query = null;
Persona persona = null; www.globalmentoring.com.mx
Archivo PruebaApiCriteria.java: Clic para descargar código
// Query utilizando el API de Criteria
// 1) Consulta de todas las Personas:
log.debug("\n1) Consulta de todas las Personas");

//1. El objeto EntityManager crea instancia CriteriaBuilder


cb = em.getCriteriaBuilder();

//2. Se crear un objeto CriteriaQuery


criteriaQuery = cb.createQuery(Persona.class);

//3. Creamos el objeto Raiz del query


fromPersona = criteriaQuery.from(Persona.class);

//4. Seleccionamos lo necesario del from


criteriaQuery.select(fromPersona);

//5. Creamos el query typeSafe


query = em.createQuery(criteriaQuery);

//6. Ejecutar la consulta


List<Persona> personas = query.getResultList();
mostrarPersonas(personas);

www.globalmentoring.com.mx
Archivo PruebaApiCriteria.java: Clic para descargar código
// 2-a) Consulta de la Persona con id = 1:
// jpql = "select p from Persona p where p.idPersona = 1";
log.debug("\n2-a) Consulta de la Persona con id = 1:");
cb = em.getCriteriaBuilder();
criteriaQuery = cb.createQuery(Persona.class);
fromPersona = criteriaQuery.from(Persona.class);
criteriaQuery.select(fromPersona).where(
cb.equal(fromPersona.get("idPersona"), 1));
persona = (Persona) em.createQuery(criteriaQuery).getSingleResult();
log.debug(persona);

// 2-b) Consulta de la Persona con id = 1:


// jpql = "select p from Persona p where p.idPersona = 1";
log.debug("\n2-b) Consulta de la Persona con id = 1, forma dinámica");
cb = em.getCriteriaBuilder();
criteriaQuery = cb.createQuery(Persona.class);
fromPersona = criteriaQuery.from(Persona.class);
criteriaQuery.select(fromPersona);

//La clase Predicate permite agregar varios criterios dinámicamente


List<Predicate> criterios = new ArrayList<Predicate>();

//Verificamos si tenemos criterios que agregar


Integer idPersonaParam = null;
idPersonaParam = 1;
if (idPersonaParam != null) {
ParameterExpression<Integer> p = cb.parameter(Integer.class, "idPersona");
criterios.add(cb.equal(fromPersona.get("idPersona"), p));
}

www.globalmentoring.com.mx
Archivo PruebaApiCriteria.java: Clic para descargar código
//Se agregan los criterios
if (criterios.isEmpty()) {
throw new RuntimeException("Sin criteriaQuery");
} else if (criterios.size() == 1) {
criteriaQuery.where(criterios.get(0));
} else {
criteriaQuery.where(cb.and(criterios.toArray(new Predicate[0])));
}

//Se crea el query con los criterios


query = em.createQuery(criteriaQuery);
if (idPersonaParam != null) {
query.setParameter("idPersona", idPersonaParam);
}

//Se ejecuta el query


persona = query.getSingleResult();
log.debug(persona);

private static void mostrarPersonas(List<Persona> personas) {


for (Persona p : personas) {
log.debug(p);
}
}

www.globalmentoring.com.mx
www.globalmentoring.com.mx
• Resultado de la ejecución del ejercicio:
[EL Info]: connection: -05-08 19:52:45.446--ServerSession(807657332)--/file:/C:/Cursos/JavaEE/Leccion07/sga-jee/target/classes/_ConsolaJpqlPU login successful
19:52:45 [main] DEBUG -
1) Consulta de todas las Personas
[EL Fine]: sql: -05-08 19:52:45.738--ServerSession(807657332)--Connection(2031467683)--SELECT id_persona, apellido_materno, apellido_paterno, email, nombre, telefono FROM
persona
19:52:45 [main] DEBUG - Persona{idPersona=1, nombre=Oscar, apellidoPaterno=Gomez, apellidoMaterno=Torres, email=ogomez@mail.com.mx34567, telefono=55780109}
19:52:45 [main] DEBUG - Persona{idPersona=6, nombre=Maria, apellidoPaterno=Gutierrez, apellidoMaterno=Esparza, email=maria@mail.com.mx, telefono=11113333}
19:52:45 [main] DEBUG - Persona{idPersona=8, nombre=Hugo, apellidoPaterno=Sanchez, apellidoMaterno=Pinto, email=hsanchez@mail.com, telefono=33334444}
19:52:45 [main] DEBUG -
2-a) Consulta de la Persona con id = 1:
[EL Fine]: sql: -05-08 19:52:45.846--ServerSession(807657332)--Connection(2031467683)--SELECT id_persona, apellido_materno, apellido_paterno, email, nombre, telefono FROM
persona WHERE (id_persona = ?)
bind => [1]
19:52:45 [main] DEBUG - Persona{idPersona=1, nombre=Oscar, apellidoPaterno=Gomez, apellidoMaterno=Torres, email=ogomez@mail.com.mx34567, telefono=55780109}
19:52:45 [main] DEBUG -
2-b) Consulta de la Persona con id = 1, forma dinámica
[EL Fine]: sql: -05-08 19:52:45.858--ServerSession(807657332)--Connection(2031467683)--SELECT id_persona, apellido_materno, apellido_paterno, email, nombre, telefono FROM
persona WHERE (id_persona = ?)
bind => [1]
19:52:45 [main] DEBUG - Persona{idPersona=1, nombre=Oscar, apellidoPaterno=Gomez, apellidoMaterno=Torres, email=ogomez@mail.com.mx34567, telefono=55780109}
------------------------------------------------------------------------
BUILD SUCCESS

www.globalmentoring.com.mx
• Con este ejercicio hemos puesto en práctica varios de los queries que
podemos ejecutar utilizando el API de Criteria

• Se deja como ejercicio extra revisar a detalle cada uno de los queries
para comprobar que ha quedado claro cada query y la sintaxis de JPA y el
API de Criteria.

www.globalmentoring.com.mx
Por: Ing. Ubaldo Acosta

www.globalmentoring.com.mx

También podría gustarte