我们正在开发一个新的Android应用,因此我们决定使用Android Room。 但是有些我不理解。
在Google的教程中,他们这样创建数据库:
@Database(entities = {Word.class}, version = 1)
public abstract class WordRoomDatabase extends RoomDatabase {
public abstract WordDao wordDao();
}
实际上我们有数百个实体,所以这意味着我必须在注释中包括每个单独的实体吗?有没有更好的方法来自动包含它们?
在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而不进行声明?
谢谢。
答案 0 :(得分:0)
我们面临着同样的问题,只是创建了一个新的Android库,该库可以为您完成所有工作并生成所有这些样板代码。
https://github.com/msbelaid/LivingRoom
例如:只需将@Crudable
添加到您的实体中,LivingRoom将为您完成工作。
一个不便之处是该库尚不支持迁移。
如果您需要对数据库进行更多控制,只需使用库生成所需的类并在新项目中复制主题即可。