Android Jetpack架构组件 — Room入坑详解

本文首发于微信公众号「Android开发之旅」,欢迎关注 ,获取更多技术干货

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

添加依赖

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

def room_version = "2.2.0-rc01"
    
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,必须要了解最基础的三个概念:

  • Entity:实体类,对应的是数据库的一张表结构。需要使用注解 @Entity 标记。
  • Dao:包含访问一系列访问数据库的方法。需要使用注解 @Dao 标记。
  • Database:数据库持有者,作为与应用持久化相关数据的底层连接的主要接入点。需要使用注解 @Database 标记。
    使用@Database注解需满足以下条件:
    定义的类必须是一个继承于RoomDatabase的抽象类。
    在注解中需要定义与数据库相关联的实体类列表。
    包含一个没有参数的抽象方法并且返回一个带有注解的 @Dao。

三者之间和应用的对应关系如下图:

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
)

比如这里我们定义了一个User类。这里使用了@Entity、@PrimaryKey、@ColumnInfo和@Ignore

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

除了以上使用的参数字段外,注解还有其他的参数,下面我来看下相关源码了解下其他的参数。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mahesh Sharma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值