Android Room:样板代码

时间:2019-04-23 15:53:37

标签: android 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的教程中,我们也得到了这样的建议:

    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而不进行声明?

谢谢。

1 个答案:

答案 0 :(得分:0)

我们面临着同样的问题,只是创建了一个新的Android库,该库可以为您完成所有工作并生成所有这些样板代码。

https://github.com/msbelaid/LivingRoom

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

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

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