引言
- 本文章旨在记录学习Android JetPack库下的Room数据库的使用,不作过于深入原理的讲解,如有问题和建议请留言讨论。
1、Room 库概念及架构示意图
概念
Google的介绍:
处理大量结构化数据的应用可极大地受益于在本地保留这些数据。最常见的使用场景是缓存相关的数据,这样一来,当设备无法访问网络时,用户仍然可以在离线状态下浏览该内容,
Room 持久性库在 SQLite 上提供了一个抽象层,以便在充分利用 SQLite 的强大功能的同时,能够流畅地访问数据库
Room 库具有一下优势:
- 针对 SQL 查询的编译时验证
- 可最大限度减少重复和容易出错的样板代码的方便注解
- 简化了数据库迁移路径
架构示意图
主要组件
Room 包含三个主要组件
- 数据库类(Room Database),用于保存数据库并作为应用持久性数据底层连接的主要访问点
- 数据实体(Entities),用于表示应用的数据库中的表
- 数据访问对象 (Data Access Objects【Dao】),提供您的应用可用于查询、更新、插入和删除数据库中的数据的方法
2、使用(Kotlin版【带注释】)
效果图展示
Android Room数据库操作
附上代码库地址:https://github.com/zqf-dev/ZRoomCode
依赖项添加
- 在build.gradle(Project)文件下添加版本
ext {
roomVersion = '2.4.2'
}
- 在build.gradle(app)文件下添加
plugins {
id 'com.android.application'
id 'kotlin-android'
// 添加kapt注解处理器
id 'kotlin-kapt'
}
android {
//排除原子函数模块并防止出现警告
packagingOptions {
exclude 'META-INF/atomicfu.kotlin_module'
}
kotlinOptions {
jvmTarget = "1.8"
}
}
dependencies{
//ktx
implementation 'androidx.core:core-ktx:1.7.0'
// room
implementation "androidx.room:room-ktx:$rootProject.roomVersion"
kapt "androidx.room:room-compiler:$rootProject.roomVersion"
// 展示数据 adapter
implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.7'
}
实体类(Entities)创建
数据库(Database)创建
*注:exportSchema:是否允许数据库架构将导出到给定的文件夹中【 默认true 】
/**
* Author: zqf
* Date: 2022/05/11
* 数据库创建
* entities: 实体类
* version: 数据库初始版本号
* exportSchema: 是否允许数据库架构将导出到给定的文件夹中【 默认true 】
*
*/
@Database(entities = [User::class], version = 1, exportSchema = false)
abstract class ZRoomDB : RoomDatabase() {
//创建userDao
abstract fun userDao(): UserDao
}
数据访问对象 (DAO)创建
/**
* Author: zqf
* Date: 2022/05/11
* 数据访问对象
*/
@Dao
interface UserDao {
// 查询
@Query("SELECT * FROM loginUser")
fun queryAllUser(): MutableList<User>
//根据姓名参数查询
@Query("SELECT * FROM loginUser WHERE name = :name")
fun queryFindUser(name: String): User?
// 添加单条数据
@Insert
fun addUser(vararg user: User)
// 添加批量数据
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun addBatchUser(list: M