room注解和注解处理器可以替我们生成实现类代码
- @ColumnInfo: 可以使bean中属性和表中的字段不同
- @Dao: 真正能够操作数据库的类
- OnConflictStrategy 主键发生冲突
- @Insert(onConflict = REPLACE) REPLACE替换、ROLLBACK回滚、ABORT中止提交、FAIL提交失败、IGNORE忽略本次冲突
- @Query("SQL语句") 读取数据注释时传入sql
- @RawQuery查询 无参需要传入SimpleSQLiteQuery("SQL语句")可以运行时动态传入sql
- @Delete 删除对象、数组、参数、集合
- @Update(onConflict = REPLACE) 更新数据
- @Datebase 被标注文件是一个数据库
- @Embedded 嵌套对象 eg:User表的所有字段映射到在Cache表中
class Cache :Serializable{
@Embedded
var user = User()
}
- @Entity 对象映射成数据表:Build project后 CacheDao 生成了一个Imp对增删改查具体的方法
- @PrimaryKey主键约束 autoGenerate是否自动生成主键
- @Relation 关联查询
@Entity(tableName = "cache")
class Cache : Serializable {
//key
@PrimaryKey
@NonNull var key:String ?=""
/* @PrimaryKey(autoGenerate = true)
var id:Int = 0*/
//bate数组 因为不用接口返回的类型不相同
@ColumnInfo
var data :ByteArray? =null
@Relation(entity = User::class,
parentColumn = "cache表的字段",
entityColumn = "User表中的字段",
projection = [])//projection需要查询的那些字段
public user:User
}
- @ForeignKey在另一个实体上声明外键。外键允许您指定跨实体的约束
- @action :
- NO_ACTION:父类删除约束表无操作,
- RESTRICT:当存在一个或多个子键映射到父键时,禁止应用程序删除或修改, RESTRICT 操作处理在字段更新后立即发生
- SET_NULL:父键被删除(对于onDelete())或修改(对于onUpdate())时,子表中所有映射到父键的行的子键列是设置为包含 NULL 值
- SET_DEFAULT:操作类似于 SET_NULL,不同之处在于每个子键列都设置为包含列默认值而不是 NULL。
- CASCADE:操作将父键上的删除或更新操作传播到每个从属子键
- @action :
@Entity(tableName = "cache", foreignKeys = {
@ForeignKey(entity = 表A的类, parentColumns = "表A的某个字段", childColumns = "cache的某个字段", onDelete = ForeignKey.RESTRICT, onUpdate = ForeignKey.SET_DEFAULT)}
)
- @Fts3、@Fts4、@FtsOptions要在 FTS表[2] 中使用的标记器
- @Ignore添加到实体的字段中,而Room 不会保留该字段
- @Index 通常会加速您的 SELECT 查询,但会减慢其他查询,如 INSERT 或 UPDATE
@Entity(tableName = "cache",
indices = [@Index(value = ["key","id"])]
)
- @Junction 声明用于加入关系的联结点
- @ProvidedTypeConverter 将类标记为将在运行时提供给 Room 的类型转换器
- @RewriteQueriesToDropUnusedColumns 注释将导致 Room 重写您的 Query 方法,以便仅从数据库中查询响应中使用的列。如果您不需要查询中返回的所有列,但也不想在查询投影中拼出它们的名称,则此注释很有用
- @RoomMasterTable Room 的主表的架构信息
- @RoomWarningsRoom 生成的警告列表。您可以在 SuppressWarnings 注释中使用这些值来禁用警告
- @SkipQueryVerification 跳过注释元素的数据库验证
- @Transaction将 Dao 类中的方法标记为事务方法
- @TypeConverter 将方法标记为类型转换器。一个类可以根据需要拥有任意数量的 @TypeConverter 方法。每个转换器方法应接收 1 个参数并具有非空返回类型
- @TypeConverters,只能用于转换列字段,因此不能被具有行返回值的方法使用,例如查询行的 DAO 方法
class DateConverter {
@TypeConverter
fun date2Long(date:Date):Long{
return date.time
}
@TypeConverter
fun long2Date(data: Long):Date{
return Date(data)
}
}
@Entity(tableName = "cache")
class Cache : Serializable {
@TypeConverters(value = [DateConverter::class])
var mdate:Date ?=null
}