Android Room 持久化库的先容及使用方法
Android Room 是 Android Jetpack 组件之一,是 Google 官方推出的用于简化 SQLite 数据库操作的持久化库。它提供了一个抽象层,答应开发者在 SQLite 数据库上执行常见的 CRUD 操作,同时处置惩罚数据库毗连、数据迁移和查询优化等底层细节。Android Room 的主要优点包罗:
[*]简化的API:Room 提供了轻便的注解和查询语言,使得数据库操作更加直观和易于编写。
[*]编译时检查:Room 在编译时对 SQL 语句进行检查,可以提前发现错误,制止在运行时出现问题。
[*]数据库迁移:Room 支持数据库结构的升级和迁移,可以轻松地处置惩罚应用程序版本更新时的数据迁移问题。
[*]响应式编程:Room 结合 LiveData 或 RxJava,可以实现数据库查询的响应式编程,实时更新 UI。
使用 Android Room 的根本步骤包罗:
[*]界说实体类:使用注解在 Java 或 Kotlin 类中界说数据库表和字段。
[*]创建数据访问对象(DAO):界说用于执行数据库操作的接口或抽象类,并使用注解指定对应的 SQL 查询语句。
[*]创建数据库:使用注解和数据库设置类来创建数据库,并指定相关的实体类和版本号。
[*]执行数据库操作:通过调用 DAO 中界说的方法,即可对数据库进行增删改查操作。
Android Room 提供了一个简朴而强大的方式来进行数据库操作,是开发 Android 应用程序时的首选选择之一。它的设计理念是为了提供更好的性能、更高的可靠性和更简朴的开发体验。
下面是Android Room的根本使用方法。
[*] 添加Room依靠
在项目标build.gradle文件中,添加以下依靠:
def room_version = "2.6.1"
implementation "androidx.room:room-runtime:$room_version"
// If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP)
// See KSP Quickstart to add KSP to your build
ksp "androidx.room:room-compiler:$room_version"
//如果需要,也可以引入以下依赖
// If this project only uses Java source, use the Java annotationProcessor
// No additional plugins are necessary
annotationProcessor "androidx.room:room-compiler:$room_version"
// optional - RxJava2 support for Room
implementation "androidx.room:room-rxjava2:$room_version"
// optional - RxJava3 support for Room
implementation "androidx.room:room-rxjava3:$room_version"
// optional - Guava support for Room, including Optional and ListenableFuture
implementation "androidx.room:room-guava:$room_version"
// optional - Test helpers
testImplementation "androidx.room:room-testing:$room_version"
// optional - Paging 3 Integration
implementation "androidx.room:room-paging:$room_version"
[*] 创建实体类
创建一个Kotlin类,表示数据库中的一个表。比方,如果要创建一个名为"User"的用户表,可以编写如下代码:
@Entity(tableName = "users")
data class User(
@PrimaryKey val id: Int,
val name: String,
val age: Int
)
[*] 创建数据访问对象(DAO)
创建一个接口,用于界说访问数据库的方法。比方,如果要访问"User"表,可以编写如下代码:
@Dao
interface UserDao {
@Insert
suspend fun insert(user: User)
@Query("SELECT * FROM users")
suspend fun getAllUsers(): List<User>
@Query("SELECT * FROM users WHERE id = :id")
suspend fun getUserById(id: Int): User
@Query("SELECT * FROM users WHERE id IN (:ids)")
suspend fun getUserByIds(ids: List<Int>): List<User>
@Update
suspend fun updateUser(user: User)
@Delete
suspend fun deleteUser(user: User)
}
[*] 创建数据库类
创建一个抽象类,继续自RoomDatabase,并使用@Database注解进行标志。在类中界说一个抽象方法,返回之前创建的DAO接口的实例。比方,如果要创建名为"AppDatabase"的数据库,可以编写如下代码:
@Database(entities = , version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
companion object {
@Volatile
private var INSTANCE: AppDatabase? = null
//单例
fun getDatabase(context: Context): AppDatabase {
return INSTANCE ?: synchronized(this) {
val instance = Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java,
"app_database")
.build()
INSTANCE = instance
instance
}
}
}
[*] 初始化数据库
在应用程序的入口处,初始化数据库实例。比方,可以将以下代码放在Application类的onCreate()方法中:
val database = AppDatabase.getDatabase(applicationContext)
[*] 使用数据库
使用之前界说的DAO接口来执行数据库操作。
// 插入用户
val user = User(1, "John Doe", 25)
database.userDao().insert(user)
// 获取所有用户
val users = database.userDao().getAllUsers()
// 根据id获取用户
val user = database.userDao().getUserById(1)
//查询指定的多个ID
val list = listOf(1,2,3)
val users1 = database.userDao().getUserByIds(list)
// 更新用户
user.name = "Jane Doe"
database.userDao().updateUser(user)
// 删除用户
database.userDao().deleteUser(user)
官方链接:https://android-dot-google-developers.gonglchuangl.net/jetpack/androidx/releases/room
Room 和 Flow 简介及应用:https://developer.android.google.cn/codelabs/basic-android-kotlin-training-intro-room-flow
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]