【白水日记】Room database
Room是Jetpack中的一个组件,处理和配置数据库的琐事,内部实现还是SQLite
数据通常使用数据类表示,使用函数get set修改访问,但在数据库中,需要使用实体和查询来操作
实体表示数据存储在数据库的对象,一个实体类对应一个表,每个实例对应表中的一行,每个属性对应表的一列
查询表示数据库中表或组合信息的请求,对执行的操作,常用的查询有增删改
room已经做了kotlin数据类存储到sqlite数据表中的实体的过程,同时实现了函数声明到sql查询的复杂工作
使用时,必须将每个实体定义为带注释的数据类,交互接口同样需要带上注释,也即dao对象,room使用这些对象进行创建表,操作查询
定义一个数据类,在类名上注释
@Entity(tableName = "xxxxxx")
tableName可以不写,默认就是类名
定义一个主键,在属性上添加注释
@PrimaryKey(autoGenerate = true)
定义其他属性,在属性上添加如下注释
@ColumnInfo(name = "xxxxxx")
这样,数据dao就定义好了
--------------------------------------------------------------------------- 关于操作,常用的就是@Insert,@Delete,@Update
进行相关操作,需要创建一个接口,用@Dao注释,接口主体内,新增一个insert()方法,上面使用@insert()注释,内部使用数据库实体类作为参数
update方法类似,query没有提供更详细的注释,需要在@Query之后写上详细的查询语句
@Query("SELECT * from xxx WHERE Id = :key")
方法的参数可以作为查询条件变量,只需要在前面加一个":"即可
@Delete方法表示删除一个条,但是对于清除表中所有的条目来说效率不高,如果只是清除数据,可以使用@Query()中执行DELETE语句进行删除
---------------------------------------------------------------------------
创建数据库,创建一个数据库,需要在类上面用@Database注释,数据库一般都是单例的,在getInstance方法中创建一个实例,如果库不存在,需要生成一个数据库,
@Database的参数中,使用entities表示实体类,version表示版本号
database对象可以定义一个companion对象,允许不实例的情况下进行访问创建或获取,在kotlin中可以通过@Volatile注释设置INSTANCE对象