Android room数据库注解

@Entity:使用Room定义一个数据实体User(带Entity注解的类),一个Entity表由主键和一个或多个列组成,User中的每个实例都代表着User表中的一行,tableName后面为表名,在不指定表名的情况下,默认将类名作为数据表的名称。
@ColumnInfo:Room默认使用字段名称作为列名称,如需更改,采用@ColumnInfo注解设置name属性(列名)。

    @ColumnInfo(name = "user_name",typeAffinity = ColumnInfo.TEXT,defaultValue = "默认值")

@Ignore:表示会忽略这个字段,不进行记录
@PrimaryKey :每一个实体类都需要一个唯一的标识即主键。
@NonNull:该字段不可为空
@Embedded :实体类中引用其它实体类
Room 不允许对象引用,通过@TypeConverter自定义类型转换器
@Embedded——引用其它实体类:假如实体类中包含了多个同一类型的嵌入字段(比如一个人User拥有两本Book),我们可以通过设置prefix属性来保持每列的唯一性。Room会将提供的值添加到嵌入对象的每个列名的开头。

//@Embedded(prefix = "one"),这个是区分唯一性的,
//比如说一这个人有2本书并添加了tag,那么在数据表中就会以prefix+属性值命名
@Embedded(prefix = "one")
private Book address;
@Embedded(prefix = "two")
private Book address;

@Dao: 使用@Dao注解定义为一个BaseDao接口,增加基本的插入、删除、修改方法,再定义一个UserDao去扩展BaseDao接口,增加需要的方法。
@Insert:插入,可以定义将其参数插入数据库中的相应表的方法

OnConflictStrategy.REPLACE:冲突策略是取代旧数据同时继续事务
OnConflictStrategy.ROLLBACK:冲突策略是回滚事务
OnConflictStrategy.ABORT:冲突策略是终止事务
OnConflictStrategy.FAIL:冲突策略是事务失败
OnConflictStrategy.IGNORE:冲突策略是忽略冲突
最新代码中ROLLBACK 和 FAIL 已经deprecated了,使用ABORT替代

@Delete:删除,可以定义用于从数据库表中删除特定行的方法
@Update:修改,可以定义用于更新数据库表中特定行的方法
@Query: 查询,可以从应用的数据库查询指定数据,用于更加复杂的插入、删除、更新操作

@DataBase:定义用户保存数据库的MyDataBase类,定义数据库配置。
@exportSchema:是否导出数据库表,默认true
如果不指定,需要将exportSchema = false,或者在app的build.gradle里设置对应的路径,否则会出现如下报错

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环境(两者选一,看项目环境)
    defaultConfig {
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
            }
        }


        //指定room.schemaLocation生成的文件路径, kotlin环境 (两者选一,看项目环境)
        kapt {
            arguments {
                arg("room.schemaLocation", "$projectDir/schemas")
            }
        }
   }

@Database(entities = {User.class, Book.class}, version = 2,exportSchema = false)

@DeleteTable:删除数据表
DROP TABLE user_table
@RenameTable: 重命名数据表
database.execSQL("RENAME TABLE user_table to new_table_name");
@DeleteColumn:删除数据表中的列
database.execSQL("ALTER TABLE user_table ADD COLUMN job TEXT");
@RenameColumn:重命名数据表中的列
database.execSQL("ALTER TABLE user_table RENAME COLUMN job TO user_job");

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容