android - Android Room:样板代码
问题描述
我们正在开发一个新的 Android 应用程序,我们决定使用 Android Room。但是有一点我不明白。
在 Google 的教程中,他们创建了这样的数据库:
@Database(entities = {Word.class}, version = 1) public abstract class WordRoomDatabase extends RoomDatabase { public abstract WordDao wordDao(); }
事实上,我们有数百个实体,这意味着我必须在注释中包含每个实体?有没有更好的方法自动包含它们?
同样在 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 而无需声明?
谢谢。
解决方案
我们遇到了同样的问题,刚刚创建了一个新的 Android 库来为您完成所有工作并生成所有这些样板代码。
https://github.com/msbelaid/LivingRoom
例如:只需添加@Crudable
到您的实体,LivingRoom将为您完成工作。
一个不便之处是该库尚不支持迁移。
如果您需要对数据库进行更多控制,只需使用库生成所需的类并将主题复制到新项目中即可。
推荐阅读
- android - 如何阻止 Android WebView 更改标头的大小写?
- android - 如何将 Activity 对象传递给 onBindViewHolder 方法以在 getScaledBitmap 方法中使用该对象
- c++ - 使用较新的 boost 库和使用旧版本的预编译二进制文件
- php - 无法从数据库中获取 int 并使用它 PHP
- azure - 如何使用我在 Azure Active Directory 中创建的应用程序注册本地创建的应用程序?
- python - Pygame 蛇吃自己
- r - 打印数据集的 2 个连续数据条目的第一个和最后一个值以绘制差异 - 在 R 中
- javascript - 在 Ajax 上获取 PDF 的输出流并在另一个文档上打开它
- python - 安装 cx_Freeze
- angular - 如何在角度测试用例中模拟 @viewchild