Consultas de Base de Datos con JPQL en Spring Boot
Clase 17 de 25 • Curso de Java Spring Data JPA: Bases de Datos
Resumen
¿Qué es JPQL y cómo utilizarlo?
JPQL, o Java Persistent Query Language, es un lenguaje que se utiliza para realizar consultas sobre una base de datos desde las Entities en vez de las tablas tradicionales. Esto permite trabajar de manera más intuitiva para los desarrolladores en Java, ya que se utilizan atributos de objetos en lugar de columnas y tablas.
¿Cómo crear un CustomerRepository
?
Para manejar la información de los clientes almacenada en la base de datos, primero necesitamos crear un repositorio. Vamos a seguir estos pasos:
- Crear un
CustomerRepository
que extiende deListCloudRepository
. - Utilizar la
CustomerEntity
para definir el tipo de la clave primaria, que en este caso es unString
. - Implementar un método para realizar consultas usando JPQL.
public interface CustomerRepository extends ListCloudRepository<CustomerEntity, String> {
@Query("SELECT c FROM CustomerEntity c WHERE c.fundNumber = :fund")
CustomerEntity findByFund(@Param("fund") String fund);
}
¿Cómo configurar el servicio de clientes?
Una vez definido el repository, es fundamental crear un servicio que lo integre y lo use para gestionar la lógica de negocio relacionada con la consulta de clientes:
- Inyectar
CustomerRepository
enCustomerService
. - Habilitar la inyección de dependencias con la anotación
@Service
. - Implementar el método
findByFund
que va a recibir unteléfono
y utilizar el repository para la consulta.
@Service
public class CustomerService {
@Autowired
private CustomerRepository customerRepository;
public CustomerEntity findByFund(String phone) {
return customerRepository.findByFund(phone);
}
}
¿Cómo construir el controlador de clientes?
El siguiente paso es crear un controlador que exponga endpoints HTTP para manejar las solicitudes relativas a los clientes:
- Anotar el controlador con
@RestController
y@RequestMapping("/api/customers")
. - Inyectar el
CustomerService
en el controlador usando@Autowired
(aunque no es obligatorio). - Implementar el método
getByFund
que atenderá las peticiones GET y devolverá la información de un cliente en base a su número de teléfono.
@RestController
@RequestMapping("/api/customers")
public class CustomerController {
@Autowired
private CustomerService customerService;
@GetMapping("/fund/{phone}")
public ResponseEntity<CustomerEntity> getByFund(@PathVariable String phone) {
return ResponseEntity.ok(customerService.findByFund(phone));
}
}
Ejecución y verificación de la aplicación
Ya listo el controlador, es el momento de poner la aplicación en ejecución y probar el endpoint creado. Al realizar una solicitud GET a /api/customers/fund/{phone}
, se espera recibir toda la información del cliente asociado al número de teléfono proporcionado. Si todo se ha hecho de manera correcta, la API responderá con estado 200 y los detalles del usuario.
JPQL muestra su fortaleza en su facilidad de uso al trabajar con OOP y su similitud en sintaxis con SQL estándar. Sin embargo, es importante considerar que SQL nativo ofrece características avanzadas no disponibles en JPQL, lo que podría ser un aspecto a explorar en clases futuras para ampliar nuestras habilidades de consulta. ¡Sigue explorando y potenciando tus habilidades en desarrollo con Java y consulta de bases de datos!