MongoDB to nierelacyjna baza danych, która cechuje się wydajnością i skalowalnością. Baza ta oparta jest na modelu dokumentu i składowane w niej dane są we formacie JSON.
Implementacja
Elementy jakie będą niezbędne do stworzenia aplikacji to:
- Zależności (pobranie);
- Model danych;
- Repozytorium.
Pobranie zależności
Zależność jaką należy umieścić w projekcie to biblioteka integrująca Mongo ze Spring Boot:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency>
Model danych
Model danych opisuje obiekt jaki zostanie umieszczony w bazie danych. W tym przypadku będzie to struktura w formacie JSON. Dla przykładu modelem jest klasa Animal. Ma ona trzy pola id, name, age. Klasa modelu musi mieć:
- adnotacje @Document;
- bezparametrowy konstruktor;
- pole z adnotacją @Id (W przypadku MongoDB kluczem jest ciąg tekstowy);
- właściwości do wszystkich pól (getery i setery).
@Document public class Animal { @Id private String id; private String name; private int age; public Animal(String name, int age) { this.name = name; this.age = age; } public Animal() { } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
Repozytorium
Ostaniem elementem jest stworzenie Repozytorium, które będzie pozwalało na zarządzanie obiektami w bazie. Należy utworzyć interfejs, który będzie posiadał adnotację @Repository i rozszerzał MongoRepository. MongoRepository przyjmuje w swoich parametrach typ modelu i typ id modelu.
@Repository public interface AnimalRepo extends MongoRepository<Animal, String> {}
Konfiguracja
Podanie konfiguracji jest opcjonalne. Jeśli mamy standardowy port i użytkownika to Spring Boot utworzy wszystkie niezbędne instancje automatycznie z domyślą bazą danych o nazwie test. Można nadpisać konfiguracje podając odpowiednie wartości w pliku application.properties.
Wykorzystanie
Przykład demonstrujący zapisywanie i odczytywanie danych w bazie danych. Metoda save() służy do zapisywania obiektu w bazie danych. Natomiast findAll() pobierze wszystkie elementy znajdujące się w bazie. Anagogicznie istnieją metody:
- findOne() – pobiera element według wskazanego id;
- delete() – usuwa element według wskazanego obiektu lub id;
- exists() – sprawdza czy dany element istnieje w bazie;
- count() – sprawdza ilość elementów w bazie;
@RestController public class AnimalApi { private AnimalRepo animalRepo; @Autowired public AnimalApi(AnimalRepo animalRepo) { this.animalRepo = animalRepo; } @EventListener(ApplicationReadyEvent.class) public void init() { animalRepo.deleteAll(); Animal animal1 = new Animal("Dog", 3); Animal animal2 = new Animal("Cat", 23); Animal animal3 = new Animal("Mouse", 1); Animal animal4 = new Animal("Bull", 4); animalRepo.save(animal1); animalRepo.save(animal2); animalRepo.save(animal3); animalRepo.save(animal4); } @GetMapping("/getAll") public List<Animal> getAll(@RequestParam int age) { return animalRepo.findAll(); } }
Kod źródłowy
Kod do przykładowej aplikacji znajdziesz na moim koncie GitHub:
https://github.com/bykowski/springboot-mongodb