Eşzamansız DAO sorgularını yazın

Sorguların kullanıcı arayüzünü engellemesini önlemek için, Oda, takip edebilirsiniz. Bu kısıtlama, DAO'nuzu (DAO) oluşturmanız gerektiği anlamına gelir. sorguları eşzamansız. Oda çeşitli çerçeveler içeren entegrasyonlar içerir. eşzamansız sorgu yürütme.

DAO sorguları üç kategoriye ayrılır:

  • Veritabanına veri ekleyen, güncelleyen veya silen tek seferlik yazma sorguları.
  • Veritabanınızdaki verileri yalnızca bir kez okuyan ve dönüş yapan tek seferlik okuma sorguları veritabanının anlık görüntüsüyle birlikte çalışır.
  • Her seferinde veritabanınızdan veri okuyan Gözlemlenebilir okuma sorguları temel veritabanı tablolarının değişmesi ve bu tabloları yansıtacak yeni değerler yayan anlamına gelir.

Dil ve çerçeve seçenekleri

Oda, belirli bir dille birlikte çalışabilmek için entegrasyon desteği sağlar özellikleri ve kitaplıkları kullanın. Aşağıdaki tabloda, kampanyalarınıza göre geçerli iade türleri sorgu türü ve çerçevesine göre değişir:

Sorgu türü Kotlin dili özellikleri RxJava Guava Jetpack Yaşam Döngüsü
Tek seferlik yazma Eş yordamlar (suspend) Single<T>, Maybe<T>, Completable ListenableFuture<T> Yok
Tek seferlik okuma Eş yordamlar (suspend) Single<T>, Maybe<T> ListenableFuture<T> Yok
Gözlemlenebilir okuma Flow<T> Flowable<T>, Publisher<T>, Observable<T> Yok LiveData<T>

Bu kılavuzda, DAO'larınızda asenkron sorgular uygulamak için bu entegrasyonları kullanabileceğiniz üç olası yöntem gösterilmektedir.

Akış ve dışkı içeren Kotlin

Kotlin, üçüncü taraf çerçeveleri olmadan asenkron sorgular yazmanıza olanak tanıyan dil özellikleri sunar:

  • Oda 2.2 ve sonraki sürümlerde Kotlin'in Akış işlevini kullanın.
  • Oda 2.1 ve daha yüksek sürümlerde, suspend anahtar kelimesini kullanarak DAO'nuzu oluşturabilirsiniz. Kotlin eş yordamları kullanarak eşzamansız sorgular

RxJava ile Java

Uygulamanızda Java programlama dili kullanılıyorsa özel dönüşü kullanabilirsiniz farklı türler oluşturabilirsiniz. Odanın sunduğu olanaklar aşağıdaki RxJava 2 dönüş türleri için destek:

Ayrıca, Oda 2.3 ve sonraki sürümler RxJava 3'ü destekler.

LiveData ve Guava ile Java

Uygulamanız Java programlama dilini kullanıyorsa ve RxJava çerçevesini kullanıyorsanız, eşzamansız yazmak için aşağıdaki alternatifleri kullanabilirsiniz sorgu sayısı:

  • LiveData sarmalayıcıyı kullanabilirsiniz sınıfını kullanabilirsiniz.
  • URL parametrelerinin Google tarafından nasıl ele alınmasını istediğinizi belirtmek için ListenableFuture<T> sarmalayıcı kullanarak eşzamansız tek seferlik sorgular yazmanızı sağlayabilir.

Eşzamansız tek seferlik sorgular yazma

Tek seferlik sorgular, yalnızca bir kez çalıştırılan ve anlık görüntü alan veritabanı işlemleridir verilere dahil edilir. Eşzamansız ile ilgili bazı örnekleri burada bulabilirsiniz tek seferlik sorgular:

Kotlin

@Dao
interface UserDao {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insertUsers(vararg users: User)

    @Update
    suspend fun updateUsers(vararg users: User)

    @Delete
    suspend fun deleteUsers(vararg users: User)

    @Query("SELECT * FROM user WHERE id = :id")
    suspend fun loadUserById(id: Int): User

    @Query("SELECT * from user WHERE region IN (:regions)")
    suspend fun loadUsersByRegion(regions: List<String>): List<User>
}

Java

@Dao
public interface UserDao {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    public Completable insertUsers(List<User> users);

    @Update
    public Completable updateUsers(List<User> users);

    @Delete
    public Completable deleteUsers(List<User> users);

    @Query("SELECT * FROM user WHERE id = :id")
    public Single<User> loadUserById(int id);

    @Query("SELECT * from user WHERE region IN (:regions)")
    public Single<List<User>> loadUsersByRegion(List<String> regions);
}

Java

@Dao
public interface UserDao {
    // Returns the number of users inserted.
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    public ListenableFuture<Integer> insertUsers(List<User> users);

    // Returns the number of users updated.
    @Update
    public ListenableFuture<Integer> updateUsers(List<User> users);

    // Returns the number of users deleted.
    @Delete
    public ListenableFuture<Integer> deleteUsers(List<User> users);

    @Query("SELECT * FROM user WHERE id = :id")
    public ListenableFuture<User> loadUserById(int id);

    @Query("SELECT * from user WHERE region IN (:regions)")
    public ListenableFuture<List<User>> loadUsersByRegion(List<String> regions);
}

Gözlemlenebilir sorgular yazma

Gözlemlenebilir sorgular, mevcut olduğunda yeni değerler yayan okuma işlemleridir sorgu tarafından başvurulan tablolarda değişiklik yapılmasını sağlar. Bu işlevi, temel veritabanındaki öğeler eklendikçe, güncellendikçe veya kaldırıldığında görüntülenen öğe listesini güncel tutmak için kullanabilirsiniz. Aşağıda bazı örnekler verilmiştir: gözlemlenebilir sorgu örnekleri:

Kotlin

@Dao
interface UserDao {
    @Query("SELECT * FROM user WHERE id = :id")
    fun loadUserById(id: Int): Flow<User>

    @Query("SELECT * from user WHERE region IN (:regions)")
    fun loadUsersByRegion(regions: List<String>): Flow<List<User>>
}

Java

@Dao
public interface UserDao {
    @Query("SELECT * FROM user WHERE id = :id")
    public Flowable<User> loadUserById(int id);

    @Query("SELECT * from user WHERE region IN (:regions)")
    public Flowable<List<User>> loadUsersByRegion(List<String> regions);
}

Java

@Dao
public interface UserDao {
    @Query("SELECT * FROM user WHERE id = :id")
    public LiveData<User> loadUserById(int id);

    @Query("SELECT * from user WHERE region IN (:regions)")
    public LiveData<List<User>> loadUsersByRegion(List<String> regions);
}

Ek kaynaklar

Eşzamansız DAO sorguları hakkında daha fazla bilgi edinmek için aşağıdaki ek bilgilere bakın kaynaklar:

Örnekler

Bloglar