Room注解的简单使用

945 阅读3分钟

room注解和注解处理器可以替我们生成实现类代码 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:操作将父键上的删除或更新操作传播到每个从属子键
	@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  
	}