Uso de Proyecciones en Queries Personalizados con Java y SQL
Clase 19 de 25 • Curso de Java Spring Data JPA: Bases de Datos
Contenido del curso
Primeros pasos
Spring Data Repositories
- 7

Uso de Spring Data Repositories para Gestión de Datos
08:39 min - 8

Guardar y Actualizar Registros con Spring Data Repositories
08:34 min - 9

Eliminar elementos con Spring Data JPA: método deleteById
05:36 min - 10

Gestión de Relaciones en JPA: Lazy vs Eager Fetching
15:09 min - 11

Query Methods en Spring para Consultas Personalizadas
08:28 min - 12

Filtrado de Pizzas por Ingredientes usando Query Methods
07:27 min - 13

Consultas Avanzadas con Query Methods en Java Spring
11:25 min - 14

Uso de Query Methods para Filtrar y Ordenar Datos en Spring
09:30 min - 15

Paginación y Ordenación con Spring Data Repositories
07:39 min - 16

Ordenamiento Dinámico con Paging and Sorting Repository
07:58 min
Personalización de queries
- 17

Consultas de Base de Datos con JPQL en Spring Boot
08:01 min - 18

Consultas SQL nativas y ordenación con Hibernate en Spring Data
08:26 min - 19

Uso de Proyecciones en Queries Personalizados con Java y SQL
Viendo ahora - 20

Actualización de Precios de Pizza con Spring Data JPA
11:50 min - 21

Propiedades ACID y Spring Data: Uso de @Transactional
10:07 min
Características avanzadas
Próximos pasos
¿Qué son las projections y cómo funcionan en Java?
Las projections son DTOs (Data Transfer Objects) que nos permiten definir una estructura personalizada para recuperar datos específicos de una base de datos. Son especialmente útiles cuando requerimos construir consultas complejas que no se ajustan completamente a los campos de una sola tabla. Imagina que en un proyecto de una Pixería, necesitas detalles de una orden que involucran varias tablas: el identificador de la orden, la fecha, y el total están en "PixaOrder," pero para el nombre del cliente consultarías la tabla "Customer," y para los nombres de las pizzas usarías la tabla "Pixa." Las projections ofrecen una forma eficiente de manejar estos casos.
¿Cómo crear una proyección?
Para crear una proyección en tu aplicación, debes seguir estos pasos:
- Crear una interfaz: Define una interfaz, por ejemplo,
OrderSummary, que contenga los métodos con los atributos que deseas recuperar en tu consulta.
public interface OrderSummary {
Integer getIdOrder();
String getCustomerName();
Date getOrderDate();
Double getOrderTotal();
String getPizzaNames();
}
- Escribir la consulta SQL: Redacta un query SQL que recupere los datos necesarios de la base de datos. Usa
JOINpara unir las tablas relevantes.
SELECT po.id_order AS idOrder,
c.name AS customerName,
po.order_date AS orderDate,
po.total AS orderTotal,
GROUP_CONCAT(p.name) AS pizzaNames
FROM pixa_order po
JOIN customer c ON po.id_customer = c.id_customer
JOIN order_item oi ON po.id_order = oi.id_order
JOIN pixa p ON oi.id_pixa = p.id_pixa
WHERE po.id_order = :orderId
GROUP BY po.id_order, c.name, po.order_date, po.total;
¿Cómo usamos la proyección en el código?
Después de crear la interfaz y la consulta, el siguiente paso es integrarla con el código de la aplicación:
- Definir el repositorio: Crea un método en tu repositorio que retorne el tipo de interfaz
OrderSummaryy anota este método con@Query.
@Query(value = "SELECT ...", nativeQuery = true)
OrderSummary findSummary(@Param("orderId") Integer orderId);
- Implementar el servicio: Añade un método en tu servicio que use el repositorio para obtener el resumen de la orden.
public OrderSummary getSummary(Integer orderId) {
return orderRepository.findSummary(orderId);
}
- Exponer en el controlador: Finalmente, crea un endpoint en el controlador para responder con esta proyección.
@GetMapping("/orders/summary/{id}")
public OrderSummary getOrderSummary(@PathVariable Integer id) {
return orderService.getSummary(id);
}
¿Cuál es el beneficio de usar projections?
Las projections ofrecen varias ventajas:
- Eficiencia: Se evita cargar entidades enteras con todas sus relaciones, mejorando la performance.
- Claridad: Hacen que el código sea más legible y facilitan la comprensión de lo que se está recuperando.
- Flexibilidad: Proveen una forma simple de definir y alterar estructuras de datos retornadas sin cambiar la lógica del query.
Así que, ¿a qué esperas para implementar esta técnica? Aprovecha las proyecciones para optimizar tus consultas y hacer tu aplicación más eficiente. ¿Quieres más? Continúa perfeccionando tus habilidades en Java y base de datos, existen demasiadas herramientas y tácticas por descubrir.