Spring Boot Rest 3/10 – Repositorios de Spring Boot para Mongo DB

38

En el anterior artículo, revisamos cómo configurar la base de datos embebida de Mongo DB en nuestro proyecto. En este artículo haremos uso de los repositorios de Mongo en Spring para interactuar con la base de datos. 🍃

Dependencias

Como se especificó en el primer artículo de esta serie, para que las clases e interfaces a explicar a continuación funcionen en tu proyecto requieres contar con las dependencias adecuadas para ello, en este caso:

implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'

Definiendo los modelos

Primeramente definiremos mediante POJOs, los documentos de Mongo DB con los que interactuaremos. Recuerda que el demo para este tutorial es un servicio de café ☕️ por lo que necesitamos un documento café y otro orden, para registrar los pedidos de nuestros clientes.

Primeramente la definición de Café:

@Document
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Coffee {

    @Id
    private String id;
    private String name;
    private String description;
    private Double price;

Y después la definición de Orden:

@Document
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Order {

    @Id
    private String id;
    private Coffee coffee;
    private int quantity;
    private Double total;

Como podrás notar, agregamos los atributos básicos que la abstracción de café podría tener en el sistema de cafetería junto con algunas anotaciones. La primera @Document, le indicará a Spring que esta es una clase que mapea a un documento de Mongo. @Id, le indicará a Spring que dicho atributo refleja el ID del documento en Mongo. Finalmente, todas las anotaciones de Lombok, nos ayudarán a tener POJOs mucho más legibles.

Puedes conocer más sobre Lombok en mi artículo al respecto 🤓

Nota también, que la definición de Orden, tiene como atributo a Coffee. Del forma que cada orden sabrá qué tipo de café se pidió. Toda esta información se guardará en Mongo DB como documentos Json.

Repositorios Spring para Mongo DB

Para poder realizar las operaciones de CRUD desde Spring con Mongo DB, agregaremos Repositorios para cada documento:

Primeramente para Café:

public interface CoffeeRepository extends MongoRepository<Coffee, String> {

    public Coffee findByName(String name);
}

Y después para Orden:

public interface OrderRepository extends MongoRepository<Order, String> {

    public Order getOrderById(String orderId);
}

Nota que son interfaces de Java que heredan de MongoRepository y que definen el Documento al que se conectarán, así como el tipo de su ID. De esta forma (y sin mayor complejidad) podremos inyectar el repositorio que requiramos a nuestras clases y llamar los métodos que por default exponen para interactuar con Mongo DB, por ejemplo:

@Service
public class CoffeeService {

    @Autowired
    private CoffeeRepository coffeeRepository;

    public List<Coffee> getMenu() {
        return coffeeRepository.findAll();
    }

En el siguiente artículo revisaremos como guardar información en Mongo DB, antes de que nuestra aplicación inicie, para casos en los que se necesite tener catálogos listos antes de exponer nuestros endpoints o similares. 😉

Repositorio de Github

Puedes encontrar el código del proyecto en el siguiente repositorio de Github:

https://github.com/chuucks/coffee-service


La configuración del proyecto de Spring Boot con Gradle, conexión a Mongo DB y autenticación básica de HTTP, en esta plataforma tiene únicamente fines educativos e ilustrativos. Para usar en producción requiere de mayores consideraciones, configuraciones y especificaciones. No dudes en contactarnos para cualquier duda o comentario o incluso abrir un Issue de Github en el repositorio del proyecto. 👍🏾

Comments

comments