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