要使用 Room 存取資料,需要使用 DAO。 這組 DAO 物件形成了 Room 的主要組件,因為每個 DAO 都包含提供對資料庫的抽象訪問方法。 通過使用 DAO 類別而不是查詢構建器或直接查詢來訪問資料庫,使用者可以分離出資料庫架構的不同元件。 此外,DAO 可在測試應用程序時輕鬆模擬資料庫訪問。 注意: 在加入 DAO 類別之前,先在 app 的 build.gradle 加入相依性。 DAO 可以是 interface,也可以是抽象類別。如果是抽象類別,它可以選擇有一個構造函數,它將 RoomDatabase 作為唯一的參數。Room 在編譯時期建立每個 DAO 實作。 注意: Room 並不支援在 Main thread 上存取資料庫,因為可能會長時間鎖定 UI。 如果要讓 Room 支援在其他執行緒存取資料庫則必須在建構時呼叫allowMainThreadQueries() 方法。 異步查詢 – 若是查詢會返回 LiveData 或 Flowable 實例 - 不受此規則的約束,因為它們在需要時在後台線程上異步運行查詢 Define methods for convenience 可以使用 DAO 類別表示多個便捷查詢。 Insert 當建立 DAO 方法並使用 @Insert 註釋時,Room 會生成一個實現,該實現在單一事務(single transaction)中將所有參數插入到資料庫中。 @Dao public interface MyDao { @Insert(onConflict = OnConflictStrategy.REPLACE) ...