Android Architecture Components Room

Posted on By Qinggai Huang

本文所有内容扩展自阅读:https://developer.android.com/training/data-storage/room/

不错的相关文章: https://medium.com/androiddevelopers/7-pro-tips-for-room-fbadea4bfbd1

@AutoValue

https://www.baeldung.com/introduction-to-autovalue

这个是一个用于Java的自动生成模板代码的注解。生成的模板代码中的变量都是final的,且不提供setter函数。会重写equalshashCode。在对象地址或里面的属性值都相同的情况下返回true

@PrimaryKey @ColumnInfo等

这几个参数以下面为例子
@PrimaryKey: 设置表的主key
@PrimaryKeys: 可以将两个列拼成一个key,每一行拼好的这个key必须是不一样的。 @ColumnInfo: 更改变量所在列名,如果没有这个就是默认变量名
@Index: 给表添加索引,用于快速query
unique: 说明前面两个的两个列first_namelast_name不能重复
@Ignore: 持久化的时候忽略
@Embedded: 将另一个表嵌入当前表中
@ForeignKey: 引用另一个表,Room不支持显示引用

@Entity(indices = arrayOf(Index(value = ["first_name", "last_name"],
        unique = true)))
data class User(
    @PrimaryKey var id: Int,
    @ColumnInfo(name = "first_name") var firstName: String?,
    @ColumnInfo(name = "last_name") var lastName: String?,
    @Ignore var picture: Bitmap?
)

@DatabaseView

这个可以从一张已有的表中,根据一些指定的规则(SQL SELECT语句),形成一个视观表。 例如像以下这种方式:

CREATE VIEW V_Customer
AS SELECT First_Name, Last_Name, Country
FROM Customer;

从表Customer中,抽出First_nameLast_nameCountry这几列形成。

来源: https://www.1keydata.com/tw/sql/sql-create-view.html

@Dao

获得app的Room数据,@Dao解释的可以是interface,也可以是abstract class,会自动生成操作数据库的方法。有以下快捷操作方法:

  • @Insert
    用于直接插入数据,onConlict意思为primary key冲突的时候的解决方法
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    
  • @Update
    用于更新数据
  • @Delete
    用于删除数据
  • @Query
    可用于读/写数据库
    @Query("SELECT * FROM user")