Implementación de Repositorio en Java para Compras en Supermercado

Clase 29 de 35Curso de Java Spring

Resumen

¿Cómo crear la implementación de nuestro repositorio compra?

Para implementar un repositorio que interactúe con la base de datos en relación a las compras, primero es necesario crear la clase CompraRepository, que implementará el PurchaseRepository. Asegúrate de anotar esta clase como @Repository para que Spring la reconozca como un componente o bean necesario para la comunicación con la base de datos. Entonces, ¿cómo empezamos?

Pasos iniciales para crear el repositorio

  1. Creación de la clase CompraRepository:
    • Dentro del paquete persistence, crea una nueva clase Java llamada CompraRepository.
    • Esta clase debe implementar PurchaseRepository.
  2. Anotaciones y configuración:
    • Asegúrate de anotar la clase con @Repository para que Spring la identifique correctamente.
    • También es necesario crear una interfaz que extienda CrudRepository llamada CompraCrudRepository.

Interacción con la base de datos

Para poder interactuar adecuadamente, el CompraCrudRepository debe extender de CrudRepository y recibir como parámetros la entidad Compra y su clave primaria, que en este caso es un Integer.

public interface CompraCrudRepository extends CrudRepository<Compra, Integer> {
    // Métodos adicionales según el caso
}

Luego, debes inyectar esta interfaz en tu CompraRepository junto al mapper necesario:

@Autowired
private CompraCrudRepository compraCrudRepository;

@Autowired
private PurchaseMapper purchaseMapper;

Implementación de métodos fundamentales

Método getAll

El método getAll recupera todos los registros de compras y los convierte a objetos del dominio:

public List<Purchase> getAll() {
    List<Compra> compras = (List<Compra>) compraCrudRepository.findAll();
    return purchaseMapper.toPurchases(compras);
}

Método getByClient

Para recuperar compras por cliente, es necesario crear un query método dentro del CompraCrudRepository:

Optional<List<Compra>> findByClienteId(String clientId);

Y emplearlo dentro de CompraRepository:

public Optional<List<Purchase>> getByClient(String clientId) {
    return compraCrudRepository.findByClienteId(clientId)
            .map(compras -> purchaseMapper.toPurchases(compras));
}

Guardado en cascada

Para garantizar que la información se guarde en cascada, asegúrate de que la entidad Compra conozca sus productos y viceversa. Implementa el patrón de relaciones cascade y mappedBy en las entidades correspondientes.

@OneToMany(mappedBy = "compra", cascade = CascadeType.ALL)
private List<Producto> productos;

Configura la relación en la entidad CompraProducto para que los productos puedan asociarse correctamente a una compra.

Método save

public Purchase save(Purchase purchase) {
    Compra compra = purchaseMapper.toCompra(purchase);
    compra.getProductos().forEach(producto -> producto.setCompra(compra));
    return purchaseMapper.toPurchase(compraCrudRepository.save(compra));
}

¿Qué sigue después de implementar el repositorio?

Este tutorial se centra en la implementación del repositorio, pero recuerda que aún faltan los servicios y controladores para completar la capa de negocio y presentación. Te animo a desarrollar estos componentes adicionales y compartir tus resultados. Si enfrentas problemas, recuerda que siempre puedes buscar soluciones en el sistema de archivos del curso o las discusiones comunitarias. ¡Sigue adelante con tu aprendizaje!