android架构组件之Room

本文详细介绍了Android的Room架构组件的使用,包括主键的定义、索引和唯一性的注解、对象关系映射、DAO的CRUD操作以及数据库的升级和复杂数据类型的处理。重点讲解了如何在Room中进行数据查询、使用RxJava进行反应式查询,以及避免主线程数据库访问。同时,文章还强调了Room不允许实体间对象引用的原因,以优化性能和用户体验。
摘要由CSDN通过智能技术生成

Room

使用主键

使用Room持久性库时,可以将相关字段集合定义为实体。 对于每个实体,在关联的数据库对象中创建一个表来保存这些项目。

默认情况下,Room会为实体中定义的每个字段创建一个列。 如果实体具有不想保留的字段,==则可以使用@Ignore对其进行注释==。 您必须通过Database类中的实体数组引用实体类。

主键:
每个实体必须有一个字段作为主键
使用@PrimaryKey标识

@PrimaryKey
public int uid;

如果需要自动分配主键:可以使用

@PrimaryKey(autoGenerate = true)
public int uid;

如果有多个主键则可以使用:

@Entity(primaryKeys = {
  "firstName,lastName"})
public class User {
   

    @ColumnInfo(name = "firstName")
    public String firstName;

    @ColumnInfo(name = "lastName")
    public String lastName;

    @Ignore
    public Bitmap picture;
}

默认情况下Room使用类名作为数据库表明,如果需要指定表名,可以使用:

@Entity(tableName = "users")
public class User {
}

==警告:SQLite中的表名是不区分大小写的。==

与tableName相同,Room使用字段名作为数据库的列名称,如果你希望修改列名称,请使用@Columninfo注解

@ColumnInfo(name = "firstName")
public String firstName;

注释索引和唯一性

如果你经常查询某个字段,可以对该字段简历索引,以加快查询速度。要向字体添加索引,请使用@Entity注解中的indices属性:

单列索引

@Entity(indices = {
  @Index("firstName")})

联合索引

@Entity(indices = {
  @Index(value = {
  "firstName","lastName"})})

注意在建立索引时,应该考虑以下准则:
- 索引不应该使用在较小的表上。
- 索引不应该使用在有频繁的大批量的更新或插入操作的表上。
- 索引不应该使用在含有大量的NULL值的列上。
- 索引不应该使用在频繁操作的列上。

唯一性

在数据库中某些字段或字段组必须唯一,可以通过将@index注释的==unique==属性设置为ture,

字段唯一
@Entity(indices = {
  @Index(value = "firstName",unique = true)})
字段组唯一
@Entity(indices = {
  @Index(value = {
  "firstName","lastName"},unique = true)})

注意:字段组唯一,必须是数据中存在一条数据,firstName字段和lastName字段和新增加的字段都相等,才认定为是重复的。如果只有一个字段重复,都可以通过unique验证。

定义对象之间的关系

如果有另一个名为Book的实体,则可以使用@ForeignKey注释来定义它与User实体的关系,例如:

@Entity(indices = {
  @Index(value = {
  "firstName","lastName"},unique = true)})
public class User {
   
    @PrimaryKey(autoGenerate = true)
    public int id;

    @ColumnInfo(name = "firstName")
    public String firstName;

    @ColumnInfo(name = "lastName")
    public String lastName;

    @Ignore
    public Bitmap picture;
}


@Entity(foreignKeys = @ForeignKey(entity = User.class,parentColumns =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值