Room新手入门

Room

Room 是所谓的 ORM(对象关系映射)库

依赖
  1. 在项目级 build.gradle 文件中,在 ext 代码块中定义 room_version

    ext {
    kotlin_version = "1.6.20"
    nav_version = "2.4.1"
    room_version = '2.4.2'
    }

  2. 在应用级 build.gradle 文件中,在依赖项列表末尾添加以下依赖项。

gradle 复制代码
implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"

// optional - Kotlin Extensions and Coroutines support for Room
implementation "androidx.room:room-ktx:$room_version"
使用
  1. 构建实体

使用 Room 时,每个表都由一个类表示。在 Room 等 ORM(对象关系映射)库中,这些类通常称为模型类或实体。

kotlin 复制代码
@Entity
data class Schedule(
   @PrimaryKey val id: Int,
   @NonNull @ColumnInfo(name = "stop_name") val stopName: String,
   @NonNull @ColumnInfo(name = "arrival_time") val arrivalTime: Int
)

要有主键,每个ColumnInfo是数据表里面的列

  1. 构建数据访问对象

一个提供数据访问的 Kotlin 类。具体而言,会在 DAO 中包含用于读取和操作数据的函数。对 DAO 调用函数相当于对数据库执行 SQL 命令。

kotlin 复制代码
@Dao
interface ScheduleDao {
    @Query("SELECT * FROM schedule ORDER BY arrival_time ASC")
fun getAll(): List<Schedule>
}

定义一个函数 getAll(),用于返回包含 @Query 注解的 Schedule 对象的列表

  1. 访问数据

虽然已经构建好整个访问数据的方法,但是我们也不能直接用VIew去访问,得用ViewModel,这也是推荐的MVVM模型

kotlin 复制代码
class BusScheduleViewModel(private val scheduleDao: ScheduleDao): ViewModel() {

调用方法就写在这上面

  1. 管理数据

我们需要一个类去管理跟数据有关的类,为什么要这么做?因为

a. 指定数据库中定义的实体。

b. 提供对每个 DAO 类的单个实例的访问。

c. 执行任何其他设置,例如预先填充数据库。

先添加一个抽象类AppDatabase,名字随意

kotlin 复制代码
@Database(entities = arrayOf(Schedule::class), version = 1)
abstract class AppDatabase: RoomDatabase() {
    companion object {
        @Volatile
private var INSTANCE: AppDatabase? = null
        
        fun getDatabase(context: Context): AppDatabase {
    return INSTANCE ?: synchronized(this) {
        val instance = Room.databaseBuilder(
            context,
            AppDatabase::class.java,
            "app_database")
            .createFromAsset("database/bus_schedule.db")
            .build()
        INSTANCE = instance

        instance
    }
}
        
}
    abstract fun scheduleDao(): ScheduleDao
}

通过这个类,可以轻松访问DAO类

使用 AppDatabase 类时,您需要确保仅存在一个数据库实例,以防出现竞态条件或其他潜在问题。该实例存储在伴生对象中,并且您还需要用一个方法来返回现有实例或首次创建数据库。此方法在伴生对象中定义。将以下 companion object 添加到 scheduleDao() 函数的正下方。

类前面的注解版本号:每次对架构做出更改时,版本号都会递增。应用会对照数据库中的版本检查此版本,以确定是否应执行迁移以及应如何执行迁移。

  1. 应用

在Application里面初始化
val database: AppDatabase by lazy { AppDatabase.getDatabase(this) }

参考网站:官方网站

相关推荐
QING6181 小时前
详解:Kotlin 类的继承与方法重载
android·kotlin·app
QING6181 小时前
Kotlin 伴生对象(Companion Object)详解 —— 使用指南
android·kotlin·app
一一Null1 小时前
Android studio 动态布局
android·java·android studio
划水哥~8 小时前
Kotlin作用域函数
开发语言·kotlin
AD钙奶-lalala9 小时前
某车企面试备忘
android
我爱拉臭臭9 小时前
kotlin音乐app之自定义点击缩放组件Shrink Layout
android·java·kotlin
匹马夕阳10 小时前
(二十五)安卓开发一个完整的登录页面-支持密码登录和手机验证码登录
android·智能手机
吃饭了呀呀呀11 小时前
🐳 深度解析:Android 下拉选择控件优化方案——NiceSpinner 实践指南
android·java
吃饭了呀呀呀11 小时前
🐳 《Android》 安卓开发教程 - 三级地区联动
android·java·后端
_祝你今天愉快12 小时前
深入剖析Java中ThreadLocal原理
android