1.简介
Room
是Google提供的Android架构组件之一,旨在简化数据库操作。它是SQLite
的一个抽象层,提供了更易用和安全的API。
Room的总体架构:
2.Room数据库的基础概念
Entity
Entity是Room中的数据表,每个Entity类对应一个SQLite表。
DAO (Data Access Object)
DAO是用于访问数据库的方法接口,定义了与数据库交互的操作。
Database
Database是Room数据库的抽象类,持有数据库并作为数据访问的主要入口点。
3.Room数据库的配置
添加依赖
在build.gradle文件中添加Room的依赖项。
dependencies {
implementation "androidx.room:room-runtime:2.5.0"
annotationProcessor "androidx.room:room-compiler:2.5.0"
// 可选 - 支持Lifecycle的LiveData
implementation "androidx.room:room-ktx:2.5.0"
}
kotlin 项目使用下面版本:
def room_version = "2.6.1"
implementation "androidx.room:room-rxjava2:$room_version" // 使用最新版本
implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"
// Room 对 Kotlin 协程的支持
implementation "androidx.room:room-ktx:$room_version"
定义Entity
// tableName 指定了数据库中对应的表名为 "users"。如果不指定,默认使用类名作为表名
@Entity(tableName = "users")
data class User(
// 使用默认值 0,autoGenerate = true 表示自动生成主键
@PrimaryKey(autoGenerate = true)
val id: Int = 0,
// 如果不使用 @ColumnInfo 注解,默认情况下 Room 将使用属性名作为数据库中的列名
@ColumnInfo(name = "first_name")
val firstName: String,
@ColumnInfo(name = "last_name")
val lastName: String
)
创建DAO
@Dao
interface UserDao {
@Insert
fun insert(user: User)
//@Insert(onConflict = OnConflictStrategy.REPLACE):用于定义插入操作,并指定了替换策略为 OnConflictStrategy.REPLACE。这意味着如果插入的数据在数据库中已存在(根据主键判断),则旧数据会被新数据替换。
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(user: User)
@Query("SELECT * FROM users WHERE id = :id")
fun getUserById(id: Int): User?
@Update
fun update(user: User)
@Delete
fun delete