Android Architecture Components: Room

Android Architecture Componentler arasında yer alan Room veritabanı kütüphanesini bu yazıda açıklamaya çalışacağım.

Room, SQLite ile yazdığımız kodları daha açık, anlaşılır ve daha az kodla yazarak database işlemlerini kolayca yapmamızı sağlayan bir kütüphanedir. Room bunun için soyut bir katman sağlar ve bunu annotationlar ile yapar.

Room çıkmadan önce Android geliştiriciler olarak zaten birçok farklı kütüphane kullanıyorduk. Bunlara en büyük örnek Realm, greenDAO, OrmLite kütüphaneleri. Peki bunlar varken neden Room kullanma ihtiyacı duyalım? Avantajları nelerdir?

  • Compile-time da SQL querylerinin doğrulanması. Yani siz bir query yazarken örneğin “SELECT * FRIM users” yazdınız. Burada FRIM kısmının hatalı olduğunu size compile-time’da bildirecektir. Ya da SQLite yazarken mutlaka karşılaşmışsınızdır; uzun queryler yazarken en ufak bir parantez ya da virgül hatası uygulamanın düzgün çalışmamasına neden olacaktır.
  • Az kod çok iş
  • Diğer Architecture Componentler ile (özellikle LiveData) birlikte çalışabilme

Nasıl kullanılır?

Öncelikle build.gradle dosyanıza alttaki gibi Google Maven repository ekliyoruz. Sonrasında app/build.gradle dosyasına gerekli dependency leri ekliyoruz.

Artık veritabanını oluşturmaya başlayabiliriz. Kullanıcı bilgilerini tutan bir veritabanı oluşturacağımızı varsayalım. Öncelikle oluşturacağımız her bir tablo için entityler oluşturmamız gerekiyor.

Burada @Entity annotation ile bu classın bir entity yani veritabanı için bir tablo olacağını belirttik. Entity içerisinde en az bir tane PrimaryKey alanı bulunmalı. Bunu da @PrimaryKey annotation ile belirtiyoruz.

Burada 1 tane entity class yazdık. Eğer projede birden fazla tablo yer alacaksa o kadar sayıda entity yazmamız gerekecekti.

Daha sonra yazdığımız entity classları için DAO (Data Access Object) arayüzü oluşturuyoruz. Burada aslında veritabanımıza neyi nasıl yapacağımızı arayüze yazdığımız metodlarla bildiriyoruz.

Gördüğünüz gibi normalde query olarak yazdığımız Insert, Update, Delete gibi işlemleri @Insert, @Update, @Delete annotationları ile yaptık. Bu işlemlerin dışında eğer özel queryler yazmak istersek @Query ile bu işlemi yapabiliriz. Örneğin; where sorgusu ile id değeri alan, limit değeri verebileceğimiz queryleri alttaki gibi yazabiliriz.

Bundan sonraki adımımız database classı oluşturmak.

Gördüğünüz gibi RoomDatabase classından extend ettiğimiz abstract classın en üstünde @Database annotation ile bu classı işaretledik ve entityleri, database versiyonu buraya yazdık. getInstance() metodu ile singleton design pattern kullanarak veritabanından bir örnek oluşturduk. (RoomDatabase classından her seferinde yeni nesne oluşturmak oldukça maliyetli bir işlem olduğu için burada singleton pattern kullanmanız yararınıza olacaktır.) En altta ise yazdığımız Dao interfaceni abstact metod olarak yazdık.

Evet artık hazırız. Gerekli classları yazdık. Son aşama olarak oluşturduğumuz veritabanını nerede kullanacaksak onu orada çağırmamız gerekiyor.

Örneğin yeni bir kullanıcı eklenecekse;

ya da var olan kullanıcılar bir listeye alınacaksa;

ÖNEMLİ NOT: Veritabanı işlemleri için mutlaka background thread kullanmalısınız. Bunun için AsyncTask, Handler, RxJava kullanabilirsiniz. Aksi halde uygulamanız crash olacaktır.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.