Bugün
scala
kullanarakMongoDB
ye bağlanıp nasıl database işlemleri yapabileceğimizden bahsedeceğim.
MongoDB halihazırda kurulu değilse
Halihazırda MongoDB
yüklemediyseniz websitesinde verilen talimatları uygulayarak çok basit bir şekilde kurulumu tamamlayabilirsiniz. Ayrıca docker
bilginiz varsa yükleme ile uğraşmayıp MongoDB container
ını çok hızlı ayağa kaldırıp devam edebilirsiniz.
Bunun yanısıra database
i yönetmek için RoboMongo tool
unu kullanmanızı tavsiye ederim.
Reactive Mongo
Scala
da MongoDB
yi bağlamak için farklı kütüphaneler kullanılabiliyor. Bu kütüphaneler arasında Mongo Scala Driver, ve şimdilerde eskide kalan Casbah gibi resmi olarak desteklenenler olsa da open source
topluluklar ile birlikte geliştirilen Tepkin, FrontLets, Subset2 gibi açık kaynak kodlu kütüphaneler de güncel olarak birçok scala
projelerinde aktif olarak kullanılmaktadır. Benim tercihim yine açık kaynak olarak geliştirilen ve şimdilerde çok popüler olan Reactive Mongo kütüphanesi oldu.
Tepkin
her ne kadar güncel olmasa da şimdilerde Almanya’da yaşayan Fehmi Can Sağlam tarafından yazıldığı için listeye ekledim.
Başlarken
İlk olarak Reactive Mongo
yu build.sbt
dosyamıza ekleyerek kütüphaneye erişmemiz gerekiyor.
Bunun için aşağıdaki gibi kendi build.sbt
dosyamıza Reactive Mongo
yu ekleyelim.
Not:
Scala Play Framework
ü kullandıgım için buconfiguration
lar diğerframework
lerde farklılık gösterebilir.
Ardından kodumuzu yazmaya başlayabiliriz.
İlk olarak reactivemongo
kütüphanesindeki ReactiveMongoApi
yi import etmemiz gerekiyor. (Bkz. 1. satır)
Daha sonra query
stringlerini yazabilmemiz için reactivemongo
nun play framework
u için tanımlanmış json
kütüphanesini de import ediyoruz.
Şimdi case class
ımızı yazmaya başlayabiliriz. Case class
ımız ReactiveMongoApi
ve name
i parametre olarak alıyor. Üçüncü parametre bizim database
de hangi makineyi tercih edeceğimizi belirtiyor. Mongo
‘da primary
ve secondary
gibi farklı makineler mevcut. Biz burada default
olarak secondary
i seçiyoruz. Bu bilgiler genelde cloud
üzerinde mongo
makinelerimizi barındırıyorsak işimize yarayacak. Şimdilik konumuz bu olmadığı için üzerine durmuyorum.
Collectionları oluşturmak için reactiveMongoApi
nin collection
methodunu kullanıyoruz. Ve argüman olarak name
parametremizi veriyoruz.
Ardından insert
methodumuz ile T tipinde bir document
i ilgili collection
a ekliyoruz.
Neden collection değişkenini lazy val olarak tanımladık?
Bunun cevabı için
lazy val
ileval
arasındaki farkı bilmemiz yeterlidir.val
tipindeki bir değişken yazıldığındacompiler
ilk olarak o değişkeni yaratır. Ve her çağrıda o değişken yeniden yaratılır.lazy val
de is tam tersine bu değişken bir yerde çağrılana kadar çalıştırılmaz ve çağrıldığı anda değeri o değişkene yazar ve tekrar tekrar çağırdığınızda yeniden üretmek yerine daha önce yazdığı değeri döner. İlgilicollection
ımız değişmeyeceği içinlazy val
tanımlamamamız için hiçbir sebep yok.
Aşağıda tanımladığımız case class
ı kullanarak bir örnek yapalım.
Basitçe name
ve age
bilgisini parametre olarak alan insertUser
methodumuz user
tablosuna name
ve age field
ları olan bir döküman olarak kaydediyor. name
in String
ve age
in Long
tipinde olduğu görebiliyoruz.
Eğer insertUser("Abdullah", 22)
olarak çağırırsak database
de name
i Abdullah age
i 22 olan bir kayıt yaratmış olacağız.
Bu işlem sonucunda database
de aşağıdaki gibi bir kayıt oluştu.
Temel olarak database işlemleri için bu kadar bilginin yeterli olacağını düşünüyorum.
Eğer anlamadığınız bir yer var ise alt kısımdaki disqus’a yorum yapabilirsiniz.
İçerikte herhangi bir eksiklik veyahut yanlış olduğunu düşündüğünüz bir kısım var ise mail atmaktan çekinmeyin.