本文所有内容扩展自阅读:https://developer.android.com/training/data-storage/room/
不错的相关文章: https://medium.com/androiddevelopers/7-pro-tips-for-room-fbadea4bfbd1
@AutoValue
这个是一个用于Java的自动生成模板代码的注解。生成的模板代码中的变量都是final的,且不提供setter
函数。会重写equals
和hashCode
。在对象地址或里面的属性值都相同的情况下返回true
。
@PrimaryKey @ColumnInfo等
这几个参数以下面为例子
@PrimaryKey
: 设置表的主key
@PrimaryKeys
: 可以将两个列拼成一个key,每一行拼好的这个key必须是不一样的。
@ColumnInfo
: 更改变量所在列名,如果没有这个就是默认变量名
@Index
: 给表添加索引,用于快速query
unique
: 说明前面两个的两个列first_name
和last_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_name
、Last_name
和Country
这几列形成。
@Dao
获得app的Room
数据,@Dao
解释的可以是interface
,也可以是abstract class
,会自动生成操作数据库的方法。有以下快捷操作方法:
- @Insert
用于直接插入数据,onConlict
意思为primary key
冲突的时候的解决方法@Insert(onConflict = OnConflictStrategy.REPLACE)
- @Update
用于更新数据 - @Delete
用于删除数据 - @Query
可用于读/写数据库@Query("SELECT * FROM user")