我想知道如何在 Android 应用程序中正确集成 Room 库。我看到的一些文章使用单例方法,使用存储库进行数据库调用,而其他文章则使用某种形式的依赖注入(Dagger 2)。我想知道这个库的正确集成?
谢谢
房间数据库
ROOM 数据库组件
ROOM数据库实施
第 1 步创建Entity数据类
@Entity(tableName = "yourOwnTableName")
数据类 LocalData(
val column1: String?,
val column2: String?,
@PrimaryKey(autoGenerate = true) val product_local_id: Int?= null
)
第2步创建数据库
@Database(实体 = [LocalData::class],版本 = 1,exportSchema = false) @类型转换器
抽象类 LocalDB : RoomDatabase() {
abstract fun localDataDao() : LocalDataDAO
companion object{
private var instance : LocalDB ? = null
fun getInstance(context: Context) : LocalDB ?{
if(instance == null){
synchronized(LocalDB ::class){
instance = Room.databaseBuilder(context.applicationContext, LocalDB::class.java, "localBD.db").allowMainThreadQueries().build()
}
}
return instance
}
fun destroyInstance(){
instance = null
}
}
}
第3步创建DAO
@道 接口 LocalDAO {
@Insert
fun insertData(productEntity: LocalData) : Long
@Delete
fun deleteData(productEntity: LocalData) : Int
@Query("Select * from yourOwnTableName")
fun showAllProducts(): List<LocalData>
@Query("SELECT COUNT(*) FROM yourOwnTableName")
fun totalProducts(): Long
}
第 4 步是可选的,即创建 存储库
类 ProductRepository(上下文:上下文){
var dbms : LocalDAO = LocalDB.getInstance(context)?.localDataDao()!!
fun insertData(productEntity: LocalData) : Long{
return dbms.insertData(productEntity)
}
fun deleteData(productEntity: LocalData) : Int{
return dbms.deleteData(productEntity)
}
fun getAllData() : List<LocalData> {
return dbms.showAllProducts()
}
fun checkProductExist(id : Int) : Boolean{
return dbms.exists(id)
}
fun totalProductsInCart() : Long{
return dbms.totalProducts()
}
}
取决于您的项目需求,目前大多数项目都使用依赖注入。您看到许多使用单例的示例的原因是因为作者不打算使新主题的解释变得更加复杂。 你可以看我写的一个medium,出于同样的原因我也做了同样的事情。
希望对您有帮助。