Spring Boot ve MongoDB'nin Birlikte Kullanımı
Merhabalar arkadaşlar. Bu yazı içerisinde sizlere Spring Boot tabanlı bir projeinin nasıl MongoDB ile birlikte kullanılabileceğini anlatacağım.
Bu yazıdaki kodların yer aldığı uygulamaya https://github.com/ilkgunel/SpringBootMongoDB adresinden erişebilirsiniz.
Bu yazı için işlemlerimizi Characters collection’ı ile yapacağız. İlk olarak mevcutta bulunan veritabanımız içerisinde yer alan Characters Collection’ına ve tuttuğu verilere bakalım.
db.Characters.find(); komutu ile Characters collection’ı içerisinde tutulan verileri çekiyorum ve 2 kayıt geldiğini görüyorum. Bunlar benim yazıdan önce test amaçlı eklediğim veriler.
Şimdi Spring Boot projesi ile MongoDB nasıl birbirne bağlanıp kullanılabilir bunu inceleyelim.
pom.xml
pom.xml dosyasında sadece 2 adet bağımlılığımız var. Bunlar Rest API ayağa kaldırmak için ihtiyacımız olan spring-boot-starter-web ve projemizi MongoDB ile beraber çalıştırmak için ihtiyacımız olan spring-boot-starter-data-mongodb bağımlılıkları.
application.properties
Projemizin MongoDB ile bağlantı kurabilmesi için gerekli tanımlamalar application.properties dosyası içerisinde yapılacak.
Yukarıda görebileceğimiz gibi projeyi MongoDB’ye bağlayabilmek için 5 adet ayar ifademiz mevcut. Bunlardan ilk ikisi kapalı çünkü benim bilgisayarımda çalışan MongoDB bir username password ikilisine sahip değil. Siz ihtiyaç duyduğunuzda bu 2 ifadeyi kullanabilirsiniz. 3. ifade bağlanacağımız MongoDB veritabanının host adresini, 4. ifade port adresini ve 5. ifade de ismini istiyor bizlerden.
Characters.java
Klasik RDBMS yapısından hatırlayacağımız gibi veritabanımızdaki tablolarımız projemizdeki entity’lerimize karşılık geliyor. NoSQL yapısında ise tabloların yerlerini Collection’lar alıyor ve Collection’lar içerisinde her bir kayıt dokuman olarak tutuluyor. Aşağıdaki kodumuzda da görebileceğiniz gibi Characters collection’ına karşılık gelecek olan Characters.java sınıfımızı @Document notasyonu ile işaretliyoruz. Bu notasyon bu sınıfın tuttuğu verilerin MongoDB’ye nasıl mapleneceğini söylüyor. Bu notasyona parametre olarak verdiğimiz collection = “Characters” ifadesi ile de bu sınıfın verilerinin Characters collection’ında tutulacağını bildiriyoruz.
CharactersRepository.java
CharactersRepository bizim veritabanı işlemleri için kullanacağımız ve Spring tarafından otomatik olarak instance’ı oluşturulacak bir interface’dir. Biz CharactersRepository interface’ini MongoRepository interface’inden kalıtıyoruz ve kalıtma sırasında Characters sınıfı ile onun ID alanının tipini veriyoruz.
CharactersService.java
CharactersService sınıfı bizim klasik Spring’den aşina olduğumuz bir servis sınıfı. Business Logic bu katmanda gerçeklenecek. CharactersService sınıfımızı @Service notasyonu ile işaretliyoruz ve içerisinde az önce bahsi geçen CharactersRepository tipinde bir objeyi @Autowired notasyonu ile inject ediyoruz. Az önce bahsettiğim gibi bu obje Spring tarafından doldurulacak.
CharactersApi.java
CharactersApi sınıfımız da Rest API endpoint olarak iş görecek sınıfımız. Client’dan gelen istekleri bu sınıfı karşılayacak. İçerisinde gelen veriyi kaydetmet için servise iletecek postCharacter ve veritabanındaki kayıtları listeleyecek allCharacters metotları yer alıyor.
Application.java
Application sınıfımız da uygulamamızı ayağa kaldırmak için kullanacağımız sınıfımız. @SpringBootApplication notasyonu dışında sınıfımız 3 notasyon ile daha işaretli. @EntityScan ile hangi path altında entity’lerin yer aldığını, @ComponentScan ile hangi path altındaki yerlerin Spring tarafından taranıp tanınması gerektiğini, @EnableMongoRepositories ile de MongoRepository’den kalıtılan interface’lerin hangi path altında olduğu bildirmiş oluyoruz.
DEMO
Şimdi uygulamamızın bir demosunu yapalım.
Postman üzerinden http://localhost:8080/CharactersAPIProject/characters/all adresine bir GET isteğinde bulunuyorum ve uygulama da bana aşağıdaki ekran görüntüsün de görebileceğimiz gibi yazının başında gördüğümüz 2 kaydı cevap olarak dönüyor.
Şimdi de /post path’ine istek göndererek kayıt işlemine bir bakalım.
http://localhost:8080/CharactersAPIProject/characters/post adresine Content-Type:application/json header’ına sahip bir POST isteğinde bulunuyorum ve body kısmında aşağıdaki veriyi gönderiyorum:
Response kısmında bana verinin başarılı şekilde kaydedildiğine dair bir mesaj dönüyor.
MongoDB’ye gidip baktığımda da verinin başarılı şekilde kaydedilmöiş olduğunu görüyorum.
Bu yazıda anlatacaklarım da bu kadar arkadaşlar. Bir sonraki yazıda görüşmek üzere.
Görüşene kadar sağlıcakla kalın.