目录
- ROOM是什么
- 为什么出现呢?
- 如何使用呢?
- 项目中如何使用呢?
- 数据库迁移
一、ROOM是什么
Jetpack中的一门技术,Room 是 Google 推出的一个在 SQLite 上提供抽象层的持久存储库。使用ROOM我们可以快速的生成数据库,表,可以快速的去访问。
涉及到的知识点:Entity,Dao,Database,Migration,Repository。
**Entity:**这是一个Model类,对应于数据库中的一张表。Entity类是Sqlite表结构在Java类的映射。
**Dao:**数据访问对象,我们可以通过它来增删改查,每一张表对应一个Dao。
Database:
Migration:
Repository:
二、为什么出现呢?
流畅地访问 SQLite 数据库。
三、如何使用呢?
1.增加插件:由于 Room框架中使用了注解处理器,因此需要使用 kapt 依赖,需要在 build.gradle 文件中引入 kapt 插件。
id 'kotlin-kapt'
2.引入依赖
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.jetbrains.kotlin.android)
id("kotlin-kapt")
}
dependencies {
implementation "androidx.room:room-runtime:2.3.0"
kapt "androidx.room:room-compiler:2.3.0"
}
3.创建一个关于用户的Entity,即创建一张用户表。
(1)Entity
@Entity(tableName = "user")
data class UserEntity(
@PrimaryKey(autoGenerate = true)
var id: Int?,
@ColumnInfo
var account:String,
@ColumnInfo
var nickname:String
)
如果不想传递id?
(2)Dao
@Dao
interface UserDao {
@Query("select * from user")
fun getAll():List<UserEntity>
@Insert
fun insertUser(userEntity: UserEntity)
@Query("select * from user where account=:account")
fun getInfoByAct(account:String):List<UserEntity>
}
(3)DataBase:为什么要搞抽象的呢?【因为我们只是定义信息,实例化是由ROOM来实现的。】
这是一个数据库,需要协助数据库的版本号,有哪些数据表.
注意,数据库对象不推荐一直创建的,消耗资源,所以我们需要做成单例的。
@Database(
entities = [UserEntity::class],
version = 1
)
abstract class MyDataBase:RoomDatabase() {
companion object{
private var instance:MyDataBase?=null //可空类型 在Kotlin中,默认情况下,所有基本数据类型(如 Int, Double 等)都是非空的
fun getInstance(context:Context):MyDataBase{
if (instance==null) {
Room.inMemoryDatabaseBuilder(context,MyDataBase::class.java)
.build()<