Android Architecture Components 之 Room 篇,flutter消息推送收费

本文详细介绍了 Android Architecture Components 中的 Room 组件,包括 Entity 的定义、主键、索引、关系的设置,以及如何使用 DAO 进行数据操作。强调了 Room 的优势在于其编译时的验证和对数据库操作的抽象,提高了应用的性能和用户体验。此外,还讨论了数据库的更新与迁移策略,提醒开发者注意数据迁移的重要性。
摘要由CSDN通过智能技术生成


productDao.insertProduct(productEntity);

每个 entity 都代表了一张表,其中的字段代表表中的一列。注解处理器会自动生成 AppDatabaseProductDao 对应的实现类 AppDatabase_ImplProductDao_Impl。可以通过调用Room.databaseBuilder()Room.inMemoryDatabaseBuilder()在运行时获取Database实例,但要注意,实例化 RoomDatabase 是相当昂贵的,最好按照单例模式只创建一个Database实例。

定义 Entity

为了让 Room 可以访问 entity,entity 中的字段必须是 public 的,或者提供了getter/setter方法。默认情况下,Room 会将 entity 中的每个字段作为数据库表中一列,如果你不想持久化某个字段,可以使用 @Ignore 注解。默认数据库表名为 entity 类名,你可以通过 @Entity 注解的 tableName 属性 更改,默认列名是字段名,你可以通过 @ColumnInfo 注解更改。

主键

每个 entity 必须至少有一个字段作为主键(primary key),即使该 entity 只有一个字段。使用 @PrimaryKey 注解来指定主键,如果你希望 SQLite 帮你自动生成这个唯一主键,需要将 @PrimaryKeyautoGenerate 属性设置成 true,不过需要改列是 INTEGER 类型的。如果字段类型是 longintInsert 方法会将 0 作为缺省值,如果字段类型是 IntegerLong 类型,Insert 方法会将 null 作为缺省值。
如果 entity 的主键是复合主键(composite primary key),你就需要使用 @Entity 注解的 primaryKeys 属性定义这个约束,如:

@Entity(primaryKeys = {“firstName”, “lastName”})
class User {
public String firstName;
public String lastName;
public String avatar;
}

索引

有些时候,我们需要添加索引以加快查询速度,可以使用 @![](https://www.hualigs.cn/image/61dba891ed8ee.jpg) Entity 注解的 indices 属性创建索引,如果某个字段或字段组是唯一的,可以将 @Index 注解的 unique 属性设置为 true 来强制这个唯一性,如:

@Entity(indices = {@Index(value = {“first_name”, “last_name”},
unique = true)})
class User {
@PrimaryKey
public int id;

@ColumnInfo(name = “first_name”)
public String firstName;

@ColumnInfo(name = “last_name”)
public String lastName;

@Ignore
Bitmap picture;
}

关系

SQLite 是关系型数据库,很多时候我们需要指定对象间的关系。即使大多数 ORM 库允许实体类对象间相互引用,但 Room 明确禁止这样做。因为级联查询不能发生在 UI 线程,UI 线程只有 16 ms 时间计算和绘制布局,所以即使一个查询只花费 5 ms,你的应用仍可能因此绘制超

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值