Android Room的使用详解攻略
什么是Android Room?
Android Room是谷歌在Android SDK 2.2以上版本中提供的一个数据库持久层解决方案,它将SQLite数据库的功能集中到一个库中,以提供更容易使用的API并允许在编译时进行类型检查。同时,它还支持LiveData、RxJava和Kotlin协程等异步编程库的集成,可帮助您构建更健壮、可维护和可扩展的应用程序。
如何使用Android Room?
使用Android Room始终包含以下三个组件:
- 实体(Entity):数据库中的表。
- 数据访问对象(DAO):定义在Entity上执行的操作。
- 数据库(Database):包含数据库持久性,赋予您控制权。
下面我们将详细介绍如何在Android应用程序中使用Android Room:
第一步:添加依赖项
在您的应用程序 build.gradle 文件中添加以下依赖项:
dependencies {
def room_version = "2.2.5"
implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor
}
第二步:创建实体
要定义实体,您必须创建一个带有注释的类,它表示要在数据库中储存的数据类型。
@Entity(tableName = "users")
data class User(
@PrimaryKey(autoGenerate = true) val id: Int,
val name: String?,
val email: String?
)
第三步:创建数据访问对象
您可以使用注释的方式定义DAO。
@Dao
interface UserDao {
@Query("SELECT * FROM users")
fun getAll(): List<User>
@Insert
fun insertAll(vararg users: User)
@Delete
fun delete(user: User)
}
第四步:创建数据库
用 @Database 注释一个抽象类作为数据库的基类。然后添加一个成员以返回该DAO。
@Database(entities = arrayOf(User::class), version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}
使用以下代码构建和获取Database实例:
val db = Room.databaseBuilder(
applicationContext,
AppDatabase::class.java, "database-name"
).build()
第五步:执行数据操作
// Inserting User
val user = User(
id = 1,
name = "John",
email = "[john@xyz.com](mailto:john@xyz.com)"
)
database.userDao().insertAll(user)
// Fetching All Users
val list: List<User> = database.userDao().getAll()
示例1:增加查询过滤条件
要添加查询过滤器,请将传递给 @Query 注释的参数替换为 ? 值,并在函数签名中传递参数。
@Query("SELECT * FROM users WHERE name LIKE :name")
fun findByName(name: String): List<User>
val users: List<User> = database.userDao().findByName("John")
示例2:使用LiveData查询数据
您可以使用LiveData观察数据库中的更改,并在发生更改时接收通知。要使用LiveData查询数据,请返回LiveData 对象。
注意:LiveData 只能在 UI 线程中观察。
@Query("SELECT * FROM users WHERE id IN (:userIds)")
fun loadAllByIds(userIds: IntArray): LiveData<List<User>>
database.userDao().loadAllByIds(intArrayOf(1, 2)).observe(this, Observer { userList ->
// Update UI when data event is received.
if (userList != null) {
// Do something with List of users...
}
})
结论
本攻略从Android Room的定义、组件、用法等方面详细介绍了Android Room的使用,同时通过示例解释了Android Room的使用方式和扩展性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android Room的使用详解 - Python技术站