Skip to content

Android Jetpack Room

一款Android官方推出的,放在Jetpack Package里面的数据库ORM框架

相关Room信息导入

kotlin
dependencies {
    val room_version = "2.8.1"

    implementation("androidx.room:room-runtime:$room_version")

    // Kotlin支持
    ksp("androidx.room:room-compiler:$room_version")

    // Java支持
    annotationProcessor("androidx.room:room-compiler:$room_version")

    // Kotlin拓展支持
    implementation("androidx.room:room-ktx:$room_version")

    // RxJava3 支持
    implementation("androidx.room:room-rxjava3:$room_version")

    // Test Code支持
    testImplementation("androidx.room:room-testing:$room_version")

    // Paging3 支持
    implementation("androidx.room:room-paging:$room_version")
}

Gradle Plugins 导入

groovy
plugins {
    id 'androidx.room' version "$room_version" apply false
}
groovy
plugins {
    id 'androidx.room'
}

android {
    ...
    room {
        schemaDirectory "$projectDir/schemas"
    }
}

Dao层数据编写

  • 增 Insert
kotlin
@Dao
interface UserDao {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insertUsers(vararg users: User)

    @Insert
    fun insertBothUsers(user1: User, user2: User)

    @Insert
    fun insertUsersAndFriends(user: User, friends: List<User>)
}
  • 删 Delete
kotlin
@Dao
interface UserDao {
    @Delete
    fun deleteUsers(vararg users: User)
}
  • 改 Update
kotlin
@Dao
interface UserDao {
    @Update
    fun updateUsers(vararg users: User)
}
  • 查 Read Query
kotlin
@Dao
interfacer UserDao {
    @Query("SELECT * FROM user")
    fun loadAllUsers(): Array<User>
}

特殊返回值类型

使用 Paging 库将查询分页

Room 通过与 Paging 库集成来支持分页查询。在 Room 2.3.0-alpha01 及更高版本中,DAO 可以返回 PagingSource 对象以便与 Paging 3 搭配使用。

kotlin
@Dao
interface UserDao {
    @Query("SELECT * FROM users WHERE label LIKE :query")
    fun pagingSource(query: String): PagingSource<Int, User>
}

Database层数据编写

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

Usage

kotlin
val db = Room.databaseBuilder(
            applicationContext,
            AppDatabase::class.java, "database-name"
        ).build()

val userDao = db.userDao()
val users: List<User> = userDao.getAll()

随便写写的,喜欢就好。 使用VitePress构建