@Entity
:使用Room定義一個(gè)數(shù)據(jù)實(shí)體User(帶Entity注解的類),一個(gè)Entity表由主鍵和一個(gè)或多個(gè)列組成,User中的每個(gè)實(shí)例都代表著User表中的一行仪或,tableName后面為表名颖系,在不指定表名的情況下,默認(rèn)將類名作為數(shù)據(jù)表的名稱忆蚀。
@ColumnInfo
:Room默認(rèn)使用字段名稱作為列名稱矾利,如需更改,采用@ColumnInfo注解設(shè)置name屬性(列名)蜓谋。
@ColumnInfo(name = "user_name",typeAffinity = ColumnInfo.TEXT,defaultValue = "默認(rèn)值")
@Ignore
:表示會(huì)忽略這個(gè)字段梦皮,不進(jìn)行記錄
@PrimaryKey
:每一個(gè)實(shí)體類都需要一個(gè)唯一的標(biāo)識(shí)即主鍵。
@NonNull
:該字段不可為空
@Embedded
:實(shí)體類中引用其它實(shí)體類
Room 不允許對(duì)象引用,通過(guò)@TypeConverter
自定義類型轉(zhuǎn)換器
@Embedded——引用其它實(shí)體類
:假如實(shí)體類中包含了多個(gè)同一類型的嵌入字段(比如一個(gè)人User擁有兩本Book)桃焕,我們可以通過(guò)設(shè)置prefix屬性來(lái)保持每列的唯一性剑肯。Room會(huì)將提供的值添加到嵌入對(duì)象的每個(gè)列名的開頭。
//@Embedded(prefix = "one"),這個(gè)是區(qū)分唯一性的观堂,
//比如說(shuō)一這個(gè)人有2本書并添加了tag让网,那么在數(shù)據(jù)表中就會(huì)以prefix+屬性值命名
@Embedded(prefix = "one")
private Book address;
@Embedded(prefix = "two")
private Book address;
@Dao
: 使用@Dao注解定義為一個(gè)BaseDao接口呀忧,增加基本的插入、刪除溃睹、修改方法而账,再定義一個(gè)UserDao去擴(kuò)展BaseDao接口,增加需要的方法因篇。
@Insert
:插入泞辐,可以定義將其參數(shù)插入數(shù)據(jù)庫(kù)中的相應(yīng)表的方法
OnConflictStrategy.REPLACE:沖突策略是取代舊數(shù)據(jù)同時(shí)繼續(xù)事務(wù)
OnConflictStrategy.ROLLBACK:沖突策略是回滾事務(wù)
OnConflictStrategy.ABORT:沖突策略是終止事務(wù)
OnConflictStrategy.FAIL:沖突策略是事務(wù)失敗
OnConflictStrategy.IGNORE:沖突策略是忽略沖突
最新代碼中ROLLBACK 和 FAIL 已經(jīng)deprecated了,使用ABORT替代
@Delete
:刪除竞滓,可以定義用于從數(shù)據(jù)庫(kù)表中刪除特定行的方法
@Update
:修改咐吼,可以定義用于更新數(shù)據(jù)庫(kù)表中特定行的方法
@Query
: 查詢,可以從應(yīng)用的數(shù)據(jù)庫(kù)查詢指定數(shù)據(jù)商佑,用于更加復(fù)雜的插入锯茄、刪除、更新操作
@DataBase
:定義用戶保存數(shù)據(jù)庫(kù)的MyDataBase類茶没,定義數(shù)據(jù)庫(kù)配置肌幽。
@exportSchema
:是否導(dǎo)出數(shù)據(jù)庫(kù)表,默認(rèn)true
如果不指定,需要將exportSchema = false,或者在app的build.gradle里設(shè)置對(duì)應(yīng)的路徑,否則會(huì)出現(xiàn)如下報(bào)錯(cuò)
Schema export directory is not provided to the annotation processor so we cannot export the schema. You can either provide `room.schemaLocation` annotation processor argument OR set exportSchema to false.
//指定room.schemaLocation生成的文件路徑, java環(huán)境(兩者選一抓半,看項(xiàng)目環(huán)境)
defaultConfig {
javaCompileOptions {
annotationProcessorOptions {
arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
}
}
//指定room.schemaLocation生成的文件路徑, kotlin環(huán)境 (兩者選一喂急,看項(xiàng)目環(huán)境)
kapt {
arguments {
arg("room.schemaLocation", "$projectDir/schemas")
}
}
}
@Database(entities = {User.class, Book.class}, version = 2,exportSchema = false)
@DeleteTable
:刪除數(shù)據(jù)表
DROP TABLE user_table
@RenameTable
: 重命名數(shù)據(jù)表
database.execSQL("RENAME TABLE user_table to new_table_name");
@DeleteColumn
:刪除數(shù)據(jù)表中的列
database.execSQL("ALTER TABLE user_table ADD COLUMN job TEXT");
@RenameColumn
:重命名數(shù)據(jù)表中的列
database.execSQL("ALTER TABLE user_table RENAME COLUMN job TO user_job");