martes, 10 de diciembre de 2019

Liferay 7.2. Service Layer - Consultas personalizadas

  No hay comentarios.
Hasta el momento hemos creado consultas simples, como listar todos los registros con un campo u otro campo iguales.

Pero necesitamos que nuestros registros puedan ser leídos con cualquier combinación de los cambios.

El Service Layer nos cubre grandes funcionalidades con las características básicas del CRUD. Además, podemos agregar otros tipos de consultas. Estos tipos de consulta se llama DynamicQuery, y es lo que veremos en este post.
La implementación es bastante simple, y se hace en la clase --LocalServiceImpl

//...
public List<Course> findByKeywords(long groupId,String keywords, int start, int end, OrderByComparator<Course> orderByComparator){
  DynamicQuery query = dynamicQuery() //crea la consulta...
    .add(RestrictionsFactoryUtil.eq("groupId", groupId)); // que groupId = al parametro...
  if (Validator.isNotNull(keywords)) {
     Junction disjunction = RestrictionsFactoryUtil.disjunction() //crea el OR...
        .add(
            RestrictionsFactoryUtil.like("name",'%'+ keywords+'%') //... con name como el keyword...
        ).add(
            RestrictionsFactoryUtil.like("description",'%'+ keywords+'%') //... o en description
        );
     query.add(disjunction); //... y lo agrega al AND del where.
  }
  return dynamicQuery(query, start, end, orderByComparator); //... termina ejecutando toda la consulta
}

Luce muy parecido al API de JPA 2.x: creando una consulta, y agregando las condiciones a medida que se van encontrando.

Usar un API así para crear las consultas considero que es la mejor manera, y así evitar construir una cadena SQL con todos los parámetros "dinámicos" que hasta puede causar confusión.

NO OLVIDAR: Hacer build service y refresh project para que surtan efectos los cambios.

El vídeo

Aquí un vídeo de la implementación, además de otras características más a considerar a nuestro proyecto.


Código fuente

Aquí está el código fuente (hasta el tema de este post):

No hay comentarios. :