JetpackRoom 基本使用

本文介绍了Jetpack Room库,它是SQLite的抽象层,提供更健壮的数据库访问。文章涵盖如何引入依赖、基本配置,包括在`build.gradle`中添加kotlin-kapt插件,并配置避免编译警告。接着讲解如何建立数据库,展示`AppDatabase.kt`的样本代码,强调查询时使用Flow的重要性,Flow可以转换为LiveData或适配Jetpack Compose。

JetpackRoom 简介

Room 持久性库在 SQLite 的基础上提供了一个抽象层,让用户能够在充分利用 SQLite 的强大功能的同时,获享更强健的数据库访问机制。 – Android Developers

引入依赖 基本配置

implementation "androidx.room:room-runtime:2.4.1"
kapt "androidx.room:room-compiler:2.4.1"
implementation "androidx.room:room-ktx:2.4.1"

之后导入一个 kotlin-kapt 插件

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'kotlin-kapt'
}

下面要配置下kotlin一些修饰符啥的,避免编译的时候警告
将这个放在 android-deafultConfig 里面

javaCompileOptions {
    annotationProcessorOptions {
        arguments += ["room.schemaLocation": "$projectDir/schemas".toString()]
    }
}

至此,基础配置结束

基本使用

建立数据库

AppDatabase.kt
Sample 代码如下

package com.sanenchen.jetpackroom
import androidx.room.*
import kotlinx.coroutines.flow.Flow

@Entity
data class User(
    @PrimaryKey(autoGenerate = true) val id: Long,
    @ColumnInfo(name = "user") val user: String
)

@Dao
interface UserDao {
    @Insert
    fun insertUser(user: User)

    @Query("select * from User order by id desc")
    fun selectAll(): Flow<List<User>>

    @Query("delete from User")
    fun dropAll()

    @Query("delete from User where id=:ids")
    fun dropID(ids: String)
}

@Database(version = 1, entities = [User::class])
abstract class AppDatabase() : RoomDatabase() {
    abstract fun userDao(): UserDao
}

这里注意下查询时候用 Flow 包一下,Flow 可以转换为 LiveData,当然对于 JetpackCompose 来说,可以直接转换为它可以理解的形式
简单来说,就是变量订阅,当数据更改时,自动更新界面

使用

val db = Room.databaseBuilder(applicationContext, AppDatabase::class.java, "database").allowMainThreadQueries().build()
// 简单说下查询吧,什么增添,删除就直接调用方法就好
val result = db.userDao().selectAll().collectAsState(listOf()).value
// 此处的 result 就可以直接被 JetpackCompose 所使用的
// 写下 Insert
db.userDao().insertUser(user)

Done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值