Ir al contenido principal

Entradas

Filtros dinámicos en JPA: Búsqueda por campos nulos y valores específicos

¿Alguna vez has necesitado implementar una búsqueda que maneje tanto valores específicos como campos nulos en tu base de datos? En este artículo te mostraré cómo hacerlo de manera elegante usando JPA y Spring Boot. El Escenario Imaginemos que tenemos una tabla de empleados ( Employee ) y queremos buscar por dos criterios: Departamento (que puede ser null) Salario (que también puede ser null) La Solución Aquí está la consulta JPA que resuelve este problema: SELECT e . * FROM Employee e WHERE ( ( : #{#filters.departmentId} IS NULL AND e.department_id IS NULL) OR ( : #{#filters.departmentId} IS NOT NULL AND e.department_id = :#{#filters.departmentId}) ) AND ( ( : #{#filters.salary} IS NULL AND e.salary IS NULL) OR ( : #{#filters.salary} IS NOT NULL AND e.salary >= :#{#filters.salary}) ) ¿Cómo funciona? Vamos a desglosarlo por partes: 1. Filtro por Departamento ( : #{#filters.departmentId} IS NULL AND e.department_id IS NULL) OR ( : #...

Sintaxis fácil de entender JAVA SQL/JPQL paso a paso

Desglose de consulta de JPQL para entender su sintaxis fácil, analicemos la siguiente consulta:  SELECT e . * FROM Employee e WHERE ( ( : #{#filters.departmentId} IS NULL -- ¿No se especificó departamento? AND e . department_id IS NULL -- ¿El empleado no tiene departamento? ) OR ( : #{#filters.departmentId} IS NOT NULL -- ¿Se especificó un departamento? AND e . department_id = : #{#filters.departmentId} -- ¿Coincide con el departamento del empleado? ) ) AND ( ( : #{#filters.salary} IS NULL -- ¿No se especificó salario? AND e . salary IS NULL -- ¿El empleado no tiene salario registrado? ) OR ( : #{#filters.salary} IS NOT NULL -- ¿Se especificó un salario? AND e . salary >= : #{#filters.salary} -- ¿El salario del empleado es mayor o igual? ) ) Dond...

Los Riesgos Ocultos de BeanUtils.copyProperties en Entidades JPA

  El Problema Muchos desarrolladores Java confían en BeanUtils.copyProperties() para mapear objetos de manera conveniente. Sin embargo, cuando se usa con entidades JPA, especialmente aquellas con campos de auditoría, esta conveniencia puede generar errores sutiles. Considera este escenario común: @EntityListeners ( AuditingEntityListener . class ) public abstract class AbstractAuditingEntity { @CreatedDate @Column ( name = "ts_created" , updatable = false ) private Instant tsCreated ; @CreatedBy @Column ( name = "id_created" ) private String idCreated ; // ... otros campos } public class MiEntidad extends AbstractAuditingEntity { // ... campos de la entidad } Cuando copiamos propiedades usando: BeanUtils . copyProperties ( entidadOrigen , entidadDestino ) ; La operación sobrescribe silenciosamente los campos de auditoría, rompiendo la funcionalidad de auditoría automática de JPA. El Impacto Esto ...

Implementar SpringDoc OpenAPI |Swagger en Java Spring en 2 PASOS

 Implementar Swagger en Java Spring  Te ayudaré a crear una introducción atractiva para tu blog sobre la implementación de Swagger en Java Spring. En el dinámico mundo del desarrollo de APIs REST, la documentación clara y accesible se ha convertido en un elemento crucial para el éxito de cualquier proyecto. Swagger, también conocido como OpenAPI, se ha establecido como el estándar de facto para documentar APIs de manera elegante y eficiente. Cuando se combina con Spring Framework, uno de los frameworks más populares en el ecosistema Java, obtenemos una poderosa herramienta que no solo mejora la documentación de nuestras APIs, sino que también facilita enormemente su prueba y mantenimiento. En este artículo, exploraremos paso a paso cómo integrar Swagger en tus aplicaciones Java Spring, transformando la tediosa tarea de documentar APIs en un proceso fluido y automatizado. Ya seas un desarrollador experimentado buscando optimizar tu flujo de trabajo o estés comenzando tu viaje...

Inyección de dependencias en Java

 Inyección de dependencias en Java Consiste en pasar la dependencia en la clase que lo va a utilizar en lugar de crearla internamente dentro de esa clase esto con el fin de no acoplar la clase a la implementación que esta utilizando.  Inversión de control: es un framework quien toma control de los objetos. En este caso Spring. El cual se encarga de crear y administrar instancias de objetos que se conocen como builds o componentes. Entonces Spring usa la notación @Autowired para la inyección de dependencias. Por lo tanto en Spring cuando estamos usando nuestras interfaces en el repositorio correspondiente es necesario asignarles la notación que te mencioné: @Auatowired, de esta manera le damos el control para que cree esas instancias: @Autowired private ProductoCrudRepository productoCrudRepository ; @Autowired private ProductMapper mapper ; Asi nos evitamos crear objetos manualmente ya que es una mala práctica y estaríamos violando el principio de inyección de dependencias, s...

Patron Data Mapper ¿para que sirve? | Java Spring

Data Mapper Para entender mejor esto te sugiero que leas y entiendas por completo como funcionan las arquitecturas de programación:  Arquitectura Hexagonal en JAVA Spring Boot   Arquitectura Limpia explicado con patitos 🐤 Arquitectura N-Capas GUÍA COMPLETA .NET Core Data Mapper nos ayuda a convertir o traducir dos objetos que pueden hacer la misma labor. ¿Qué logramos con esto?  No se expone la BD a la API No tener campos innecesariso en la API Descooplar nuestra API a una base de datos puntual  No se mezcla idiomas en el dominio En el caso que se desee integrar una nueva base de datos con otros campos, pero que sea para el mismo proyecto, no es necesario cambiar todo el código, simplemente se crea otro traductor que sirva para traducir la nueva tabla al dominio Para usarlo necesitaremos MapStruct El cual es un generador de código.: MapStruct – Java bean mappings, the easy way! Luego vas a documentación y si usas gradle serían estas 2 lineas para importarlo a tu pro...

Java Spring | Al grano lo que necesitas para levantar un proyecto

 ¿Qué es Srping?  Es el framework mas popular de Java Es usado por Mercedes-Benz y Netflix en sistemas internas Posee una gran comunidad Es muy modular y flexible Aplicaciones web, reactivas y procesar grandes lotes de información con Batch.  En resumen para construir Spring tiene 4 proyectos: Spring Framework: Permite crear aplicaciones empresariales modernas. Spring Boot: Permite crear aplicaciones auto contenidas y autoconfigurables.  Sprint Data JPA: Gestiona e integra las BD.  Spring Security: Permite autenticación, autorización, evitar ataques, etc.  Usaremos lo siguiente para poder tener levantado un ambiente:  Para Postgress es importante mencionar que estaremos usando EDB:   EDB: Open-Source, Enterprise Postgres Database Management