Room 包含三个主要组件:

  • 数据库类,用于保存数据库并作为应用持久性数据底层连接的主要访问点。
  • 数据实体,用于表示应用的数据库中的表。
  • 数据访问对象 (DAO),为您的应用提供在数据库中查询、更新、插入和删除数据的方法。

数据库类为应用提供与该数据库关联的 DAO 的实例。反过来,应用可以使用 DAO 从数据库中检索数据,作为关联的数据实体对象的实例。此外,应用还可以使用定义的数据实体更新相应表中的行,或者创建新行供插入。

Android JetPack Room用法_Room

1、导入三方远程库

在build.gradle中引入room远程依赖,需要添加kotlin-kapt插件。

plugins {
    id 'kotlin-kapt'
}

dependencies {
    implementation "androidx.room:room-runtime:2.4.2"
    kapt "androidx.room:room-compiler:2.4.2"
}

2、构建数据库实体类

使用@Entity标注的实体类,可以生成一张数据表,可以使用tableName来自定义表名,类名为默认数据库表名;@PrimaryKey注解表示该字段为主键,autoGenerate参数表示为自增长。

@Entity(tableName = "houseInfo")
class HouseInfo(
    @PrimaryKey(autoGenerate = true) var id: Int = 0,
    var name: String = "",
    var price: Double = 0.0,
    var area: Double = 0.0,
)

3、创建@Dao接口类

使用@Dao注解创建的接口,主要定义一些增、删、改、查的方法。

@Dao
interface HouseDao {
    //根据id查询对象
    @Query("select * from houseInfo where id=:id")
    fun getUserById(id: Int): HouseInfo

    //查询表中对象集合
    @Query("select * from houseInfo")
    fun getAllHouse(): MutableList<HouseInfo>

    //像表中插入一条数据
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun addHouse(houseInfo: HouseInfo)

    //跟新表中数据
    @Update(onConflict = OnConflictStrategy.REPLACE)
    fun updateHouse(houseInfo: HouseInfo)

    //删除表中某条数据
    @Delete
    fun delHouseInfo(houseInfo: HouseInfo)
}

4、创建数据库抽象类

创建数据库抽象类继承自RoomDatabase,构建一个单例数据库对象,同时在该类中抽象一个Dao方法。

@Database(entities = [HouseInfo::class], version = 1)
abstract class MyDataBase : RoomDatabase() {
    companion object {
        val db by lazy {
            Room.databaseBuilder(Utils.getApp(), MyDataBase::class.java, "my_db.db")
                .fallbackToDestructiveMigration().allowMainThreadQueries()
                .build()
        }
    }

    abstract fun houseDao(): HouseDao

}

5、使用方法

//初始化room对象
val houseDao by lazy {
        MyDataBase.db.houseDao()
}

//获取数据方法。根据实际情况在Dao中定义。
houseDao.addHouse(HouseInfo(name = "东方与邻居", price = 32562.52, area = 100.5))