💽Room Database
Android üzerinde SQLite yerine üretilmiş yeni db formatı RoomDB
🚴♂️ RoomDB'ye Giriş
🤓 SQL komutları ile uğraşmadan direkt android kodları ile çalışmamızı sağlar
✨ Optimize edilmiş bir veri tabanı sunar (
LiveData
)💨 Kotlin Flow yapısı ile RoomDB oluşturabilir (👨🔬 Deneysel)
🚀 Faydalı bağlantılara sayfanın en altından erişebilirsin
📢 Java örneği ile Kotlin örneği birbirinden bağımsızdır
🏗️ Projeye Dahil Etme
🔄 Güncel RoomDB sürümüne Versions alanından erişebilirsin
➕ RoomDB için Kotlin eklentilerine Room KTX alanından erişebilirsin
🧙♂ Detaylar için Declaring dependencies alanına bakabilirsin.
🧱 Temel Yapı
⭐ Entity Yapısı
🧱 DB'ye aktarılacak sütun isimlerini temsil ederler
🏷️ Annotation yapısı ile özellikleri belirlenir
🔸 Tablodaki sütün isimleri entity üzerindeki değişkenlerle temsil edilir
👮♂️ Primary key ve Entity etiketini eklemek zorunludur
👀 Daha fazlası için Entity ve Defining data using Room entities dokümanlarına bakabilirsin.
👀 Entity Hakkında Bir Kaç Detay
💡 SQL yapısında veriler 64 bit olduğundan:
🧮 32bit long değeri 64bit int değerine eş değerdir
🔄
id
değerlerini long olarak tutsanız da android onu int olarak tanımlanacaktır🏹 Veri tabanına eklenen verilerin
id
bilgileri long olarak döndürülür
🧙♂ Detaylı bilgiler için bağlantılar:
🛳️ DAO Yapısı
🐣 Tablolara erişmek için kullanılan yapıdır
🧱 Abstract veya Interface olmak zorundadır
🏷️ SQLite query metinleri metotlara Annotation yapısı ile tanımlanır
✨ LiveData yapısı ile güncel verileri döndürür
📢 SQLite ile SQL Server syntax yapısı buradaki kaynağa göre farklı olabilmekte
👀 Daha fazlası için The DAO (data access object) dokümanına bakabilirsin.
🗂️ Room Database
🧱 Abstract olmak zorundadır
🏗️
Room.databaseBuilder(...)
yapısı ile db tanımlanır🏷️ Database etiketi içerisinde
entities
alanında tablo verilerini temsil eden Entity Class'ınızın objesi verilirversion
alanında db'nin en son sürümünü belirtin🐛 Versiyon geçişleri arasındaki sorunları engellemek için
fallbackToDestructiveMigration()
özelliği eklenir
👀 Daha fazlası için Room database dokümanına bakabilirsin.
👮♂️ DB'yi Koruma
🚫 Veri tabanına birden çok istek gelmesini engeller
🐞 Birden çok isteğin eş zamanlı yapılmaya çalışması conflict oluşturacaktır
💔 Conflict yapısı veri tabanındaki verilerin uyuşmazlığını belirtir
Birden fazla Thread gelmesi durumunda engellemek için synchronized anahtar kelimesi kullanılır
✨ Gereksiz Thread engelinden sakınmak için, synchronized yapısı içerisinde tekrardan if kontrolü yapılmalıdır
👀 Detaylar için Multi-threading alanına bakabilirsin.
🏗️ Repository Yapısı
🌃 Alt katmanda olan tüm sınıfları tek bir sınıfmış gibi gösterir
😏 Bu sayede ViewModel üzerinden birden fazla sınıfla uğraşmak zorunda kalmayız
🚧 DB üzerinde yapılacak olan tüm işlemlerinde burada metot olarak tanımlanması lazımdır
✨ LiveData yapısı sayesinde verileri otomatik günceller
🦄 Verilerin aktarımı bir defaya mahsus Constructor üzerinde yapılır
🌠 Verilerin aktarılması asenkron olması gerektiğinden AsyncTask yapısı kullanılır
🛍️ ViewModel
🧱 Yapılandırma değişikliklerine karşı dayanıklıdır
🐣 Repository ile DB'ye erişir
🎳 Activity context objesi gönderilmez, çok maliyetlidir
🥚 Context verisi miras alınmalıdır
📝 UI ile alakalı bilgilerin kaydı ile uğraşır
✨ LiveData
🔄 Verileri güncel tutmak için kullanılır
📈 Performansı artırır
🧱 Yapılandırma değişikliklerine karşı dayanıklıdır
📳 Telefonu çevirme vs.
🍱 Tüm katmanlardaki metotlar kapsüllenmelidir
🚀 Main Activity
🧙♂ Detaylar için RecycleView alanına bakabilirsiniz.
🔗 Faydalı Bağlantılar
🚀 Bu alandaki bağlantılar YEmoji ~Bağlantılar yapısına uygundur
🎃 Kotlin
☕ Java
Last updated