android 上的同一个数据库可以有多个文件 dao 吗?
Is it possible to have multiple files dao to the same database on android?
我想创建多个 DAOS 文件以更好地组织项目,即使我只有一个数据库。当我尝试按照这些思路做某事时,它起作用了:
@Database(version = 1, entities = [ContaBancaria::class])
abstract class CArchDatabase : RoomDatabase() {
abstract fun contaBancariaDao(): ContaBancariaDao
companion object {
fun createDatabase(context: Context): RoomDatabase {
return Room.databaseBuilder(context, CArchDatabase::class.java, "CArchDatabase.db")
.fallbackToDestructiveMigration()
.build()
}
}
}
但是,当我尝试这样的操作时,它不起作用:
@Database(version = 1, entities = [ContaBancaria::class, entity1, entity2,entity3 ....])
abstract class CArchDatabase : RoomDatabase() {
abstract fun contaBancariaDao(): ContaBancariaDao
abstract fun dao1(): dao1
abstract fun dao2(): dao2
abstract fun dao3(): dao3
abstract fun dao4(): dao4
.
.
.
companion object {
fun createDatabase(context: Context): RoomDatabase {
return Room.databaseBuilder(context, CArchDatabase::class.java, "CArchDatabase.db")
.fallbackToDestructiveMigration()
.build().dao1().dao2().dao3()....
}
}
}
我正在使用 koin 单例来创建我的数据库
val cacheDataModule = module {
single { CArchDatabase.createDatabase(androidContext()) }
factory<ContaBancariaCacheDataSource> {
ContaBancariaCacheDataSourceImpl(
contaBancariaDao = get()
)
}
}
您的每个数据库 DAO 都必须有一个 @Dao
class 定义操作的位置(查看文档:https://developer.android.com/training/data-storage/room#dao)
根据您的代码,我假设您已经有一个 ContaBancariaDao
class。如果你想创建更多的 DAO,你需要创建新的 class 类似于那个。
那么你只需要在你的CArchDatabase
中添加一个新的fun
。
如果您还想添加新实体,请记住将它们添加到 @Database
注释中的 entities
数组中。
@Database(entities = arrayOf(ContaBancaria::class, Other::class), version = 1)
abstract class CArchDatabase : RoomDatabase() {
abstract fun contaBancariaDao(): ContaBancariaDao
abstract fun otherDao(): OtherDao
companion object {
fun createDatabase(context: Context): RoomDatabase {
return Room.databaseBuilder(context, CArchDatabase::class.java, "CArchDatabase.db")
.fallbackToDestructiveMigration()
.build()
}
}
}
我想创建多个 DAOS 文件以更好地组织项目,即使我只有一个数据库。当我尝试按照这些思路做某事时,它起作用了:
@Database(version = 1, entities = [ContaBancaria::class])
abstract class CArchDatabase : RoomDatabase() {
abstract fun contaBancariaDao(): ContaBancariaDao
companion object {
fun createDatabase(context: Context): RoomDatabase {
return Room.databaseBuilder(context, CArchDatabase::class.java, "CArchDatabase.db")
.fallbackToDestructiveMigration()
.build()
}
}
}
但是,当我尝试这样的操作时,它不起作用:
@Database(version = 1, entities = [ContaBancaria::class, entity1, entity2,entity3 ....])
abstract class CArchDatabase : RoomDatabase() {
abstract fun contaBancariaDao(): ContaBancariaDao
abstract fun dao1(): dao1
abstract fun dao2(): dao2
abstract fun dao3(): dao3
abstract fun dao4(): dao4
.
.
.
companion object {
fun createDatabase(context: Context): RoomDatabase {
return Room.databaseBuilder(context, CArchDatabase::class.java, "CArchDatabase.db")
.fallbackToDestructiveMigration()
.build().dao1().dao2().dao3()....
}
}
}
我正在使用 koin 单例来创建我的数据库
val cacheDataModule = module {
single { CArchDatabase.createDatabase(androidContext()) }
factory<ContaBancariaCacheDataSource> {
ContaBancariaCacheDataSourceImpl(
contaBancariaDao = get()
)
}
}
您的每个数据库 DAO 都必须有一个 @Dao
class 定义操作的位置(查看文档:https://developer.android.com/training/data-storage/room#dao)
根据您的代码,我假设您已经有一个 ContaBancariaDao
class。如果你想创建更多的 DAO,你需要创建新的 class 类似于那个。
那么你只需要在你的CArchDatabase
中添加一个新的fun
。
如果您还想添加新实体,请记住将它们添加到 @Database
注释中的 entities
数组中。
@Database(entities = arrayOf(ContaBancaria::class, Other::class), version = 1)
abstract class CArchDatabase : RoomDatabase() {
abstract fun contaBancariaDao(): ContaBancariaDao
abstract fun otherDao(): OtherDao
companion object {
fun createDatabase(context: Context): RoomDatabase {
return Room.databaseBuilder(context, CArchDatabase::class.java, "CArchDatabase.db")
.fallbackToDestructiveMigration()
.build()
}
}
}