Android数据库框架——Room框架的使用

一、前言

Room是Jetpack组件库一员,属于ORM库,主要是对Sqlite做了一层抽象,从而简化开发者对数据库操作。Room支持编译时的语法检查,并且支持返回LiveData。官网说明

二、添加依赖

在app的build.gradle最前面加入

apply plugin: 'kotlin-kapt'

在app的build.gradle中添加如下依赖:

def room_version = "2.2.5"

implementation "androidx.room:room-runtime:$room_version"
// For Kotlin use kapt instead of annotationProcessor (注意这个注释)
kapt "androidx.room:room-compiler:$room_version"

如果项目是使用Kotlin语言来开发的,在添加room-compiler的时候使用kapt关键字,java语言开发的就使用annotationProcessor关键。否则会导致访问出错。

Room 具有以下注解处理器选项:

  • room.schemaLocation:配置并启用将数据库架构导出到给定目录中的 JSON 文件的功能。如需了解详情,请参阅 Room 迁移
  • room.incremental:启用 Gradle 增量注解处理器。
  • room.expandProjection:配置 Room 以重写查询,使其顶部星形投影在展开后仅包含 DAO 方法返回类型中定义的列。
android {
   
    ...
    defaultConfig {
   
        ...
        javaCompileOptions {
   
            annotationProcessorOptions {
   
                arguments += [
                    "room.schemaLocation":"$projectDir/schemas".toString(),
                    "room.incremental":"true",
                    "room.expandProjection":"true"]
            }
        }
    }
}

三、重要概念

要想使用Room,必须要了解最基础的三个概念:

  • Entity:实体类,对应的是数据库的一张表结构。需要使用注解 @Entity 标记。
  • Dao:包含访问一系列访问数据库的方法。需要使用注解 @Dao 标记。
  • Database:数据库持有者,作为与应用持久化相关数据的底层连接的主要接入点。需要使用注解 @Database 标记。

3.1 Entity

使用 @Entity注解定义的类会被映射为数据库中的一张表。默认实体类的类名为表名,字段名为表名。当然我们也是可以修改的。

@Entity(tableName = "users")
data class User(
    @PrimaryKey(autoGenerate = true) var userId: Long,
    @ColumnInfo(name = "user_name")var userName: String,
    @ColumnInfo(defaultValue = "china") var address: String,
    @Ignore var sex: Boolean
)

注解解释

  • @Entity注解中我们传入了一个参数 tableName用来指定表的名称。
  • @PrimaryKey注解用来标注表的主键,并且使用autoGenerate = true 来指定了主键自增长。
  • @ColumnInfo注解用来标注表对应的列的信息比如表名、默认值等等。
  • @Ignore 注解顾名思义就是忽略这个字段,使用了这个注解的字段将不会在数据库中生成对应的列信息。

除了以上使用的参数字段外,注解还有其他的参数可查看源码

3.2 Dao

Dao类是一个 interface,其中定义了一系列的操作数据库的方法。通常我们操作数据库无非就是增删改查。Room也为我们的提供了相关的注解,有 @Insert@Delete@Update@Query

@Dao
public interface UserDao {
   

	@Query("select * from user where userId = :id")
	fun getUserById(id: Long): User

	@Insert(onConflict = OnConflictStrategy.REPLACE)
	fun addUser(user: User)
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值