首页 > 解决方案 > Android Room:样板代码

问题描述

我们正在开发一个新的 Android 应用程序,我们决定使用 Android Room。但是有一点我不明白。

  1. 在 Google 的教程中,他们创建了这样的数据库:

    @Database(entities = {Word.class}, version = 1) public abstract class WordRoomDatabase extends RoomDatabase { public abstract WordDao wordDao(); }

事实上,我们有数百个实体,这意味着我必须在注释中包含每个实体?有没有更好的方法自动包含它们?

  1. 同样在 Google 的教程中,我们得到了这样的一个 dao:

    WordRepository(Application application) { WordRoomDatabase db = WordRoomDatabase.getDatabase(application); mWordDao = db.wordDao(); mAllWords = mWordDao.getAllWords(); }

那是因为他们这样做了:

@Database(entities = {Word.class}, version = 1)
public abstract class WordRoomDatabase extends RoomDatabase {

   public abstract WordDao wordDao();

   private static volatile WordRoomDatabase INSTANCE;

   static WordRoomDatabase getDatabase(final Context context) {
...

同样的问题,为了得到wordDao,我需要在中声明抽象方法WordRoomDatabase,想象我有数百个实体(所以数百个 DAO)?有没有办法直接从 db 获取 dao 而无需声明?

谢谢。

标签: androidandroid-room

解决方案


我们遇到了同样的问题,刚刚创建了一个新的 Android 库来为您完成所有工作并生成所有这些样板代码。

https://github.com/msbelaid/LivingRoom

例如:只需添加@Crudable到您的实体,LivingRoom将为您完成工作。

一个不便之处是该库尚不支持迁移。

如果您需要对数据库进行更多控制,只需使用库生成所需的类并将主题复制到新项目中即可。


推荐阅读