Room 包含三个主要组件:
- 数据库类,用于保存数据库并作为应用持久性数据底层连接的主要访问点。
- 数据实体,用于表示应用的数据库中的表。
- 数据访问对象 (DAO),为您的应用提供在数据库中查询、更新、插入和删除数据的方法。
数据库类为应用提供与该数据库关联的 DAO 的实例。反过来,应用可以使用 DAO 从数据库中检索数据,作为关联的数据实体对象的实例。此外,应用还可以使用定义的数据实体更新相应表中的行,或者创建新行供插入。

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))
















