简单的使用: 第一步,在entiy包中增加实体类的定义,每个实体类对应一个表,,类前面加@Entity注解,默认类名就是最终生成的表名,如果不想让一致,可以指定表名(@Entity (tableName...自增类型的主键,则可以设置 @PrimaryKey 的 autoGenerate 属性。 忽略字段: 使用@Ignore注解,如,@Ignore val picture: Bitmap?...更改字段名使用@ColumnInfo(name = "xxx")注解,如果不指定,默认就是属性名。...import com.xxx.xx.room.entity.Age import com.xxx.xx.room.entity.User @Database(entities = [User::class...当修改表字段或者增加表结构时,数据库升级注意事项: 无论是增加新表还是只是修改表字段或增加表字段,都需要增加下数据库的版本号并增加Migration处理, @Database(entities = [User
Room其实就是一个orm,抽象了SQLite的使用,但是它作为Android的亲儿子orm,并且原生支持LiveData和Rxjava嵌套使用,学习一下还是不错的。...repositories { jcenter() google() } } 添加依赖 dependencies { // Room implementation "android.arch.persistence.room...private String name; @ColumnInfo(name = "sex") private int sex; @Ignore//指示Room需要忽略的字段或方法...在这些情况下,您可以使用@Embedded来表示一个对象,您希望将其分解为表中的子字段。...id , firstName , street , state , city , 和 post_code 注意 :嵌入式字段还可以包含其他嵌入式字段 如果一个实体具有相同类型的多个内嵌字段,则可以通过设置前缀属性
//exportSchema = true 生成数据库创建表或升级等操作及字段描述的json文件 //修改数据库版本直接通过version修改 //SkipQueryVerification注解是编译时候是否验证...Ignore标签,让Room忽略这个构造器 * Ignore也可用于字段 * Room不会保存@Ignore注解标记的字段的数据 */ @Ignore public...每个Entity至少有一个字段作为主键,如果想让数据库为字段自动分配ID,可以使用autoGenerate,如果Entity想有符合主键,可以使用@Entity注解里的primaryKeys,设置复合主键...Room通过@Ignore设置忽略字段,如果Entity继承了父Entity的字段,可以通过@Entity注解里的ignoredColumns属性设置。...@Dao public interface CacheDao { //插入冲突解决方案,默认ABORT(中止)。REPLACE(替换)。IGNORE(忽略插入数据)。ROLLBACK(回滚)。
在运行时,您可以通过调用 Room.databaseBuilder() 或 Room.inMemoryDatabaseBuilder()获取 Database的实例。...@Ignore 声明忽略的对象 很简单的一张表,主要是name和insertTime字段。...Room通过Migration类来执行升级的操作,我们只要告诉Migration类改了什么就行,比如新增字段或表。...room.expandProjection:配置 Room 以重写查询,使其顶部星形投影在展开后仅包含 DAO 方法返回类型中定义的列。 android { ......最佳实践 | 基于 Android 开发者峰会应用
' 定义一个实体类,在class上使用 @Entity注解 ,还需要一个构造方法,Room会根据这个构造将表里的数据转化为实体类,对于其他我们代码里使用的构造方法,可以使用@Ignore注解表示Room...将忽略它,属性也可以使用这个注解,表示这个属性将不会生成数据库字段 使用@PrimaryKey注解指定主键并且是自增长的 属性还可以指定在数据库的字段等,使用@ColumnInfo注解: package...@Update void updateUser(User user); } 定义抽象类,继承于RoomDatabase,并使用@Database注解,注解中指定表的实体类、数据库版本、是否输出日志...使用单例模式时,构造方法不能私有化,因为Room内部会调用构造方法 定义获取Dao对象的抽象函数 package com.aruba.room; import android.content.Context...二、ViewModel+LiveData+Room Room支持返回LiveData类型,结合ViewModel、DataBinding,就可以改造成一个非常棒的MVVM架构 package com.aruba.room
一、简介 Room是Google推出的Android架构组件库中的数据持久化组件库, 也可以说是在SQLite上实现的一套ORM解决方案。...@Ignore 用于告诉Room需要忽略的字段或方法 建立索引:在@Entity注解的indices属性中添加索引字段。...,也可以是一个抽象类, Room会在编译时创建DAO的实现。...支持返回RxJava2 的Flowablbe, Maybe和Single对象,对于使用RxJava的项目可以很好的衔接, 但需要在gradle添加该依赖:android.arch.persistence.room...3.2 原有SQLite数据库迁移至Room 因为Room使用的也是SQLite, 所以可以很好的支持原有Sqlite数据库迁移到Room。
如果你想让Room为entity设置自增ID,你可以设置@PrimaryKey的autoGenerate属性。...如果你的entity有一个组合主键,你可以使用@Entity注解的primaryKeys属性。 2.tableName Room默认把类名作为数据库的表名。...3.ColumnInfo Room默认把field名称作为数据库表的column名。如果你想让column有不一样的名称,为field添加@ColumnInfo属性。...要为一个entity添加索引,在@Entity注解中添加indices属性,列出你想放在索引或者组合索引中的字段。 有时候,某个字段或者几个字段必须是唯一的。...这种情况下,你可以使用@Embedded注解,表示你想把一个对象分解为表的子字段。然后你就可以像其它独立字段那样查询这些嵌入的字段。
; Schema 文件是 描述 Room 数据库结构的文件 , 通过该文件 , 可以 很方便地开发者了解数据库的历史变更记录 , 方便排查问题 ; Schema 文件 定义了数据库中的表、列、索引等元素的结构...任务,它会将 Schema 文件导出到指定的目录中 , 该目录需要在 build.gradle 构建脚本中配置 ; 二、生成 Schema 文件配置 在进行 Room 数据库升级时 , 可以使用 Room..., exportSchema 参数都设置为了 false , 没有导出 Schema 文件 ; 此外 , 还要在 build.gradle 构建脚本中 配置 Schema 文件的生成位置 , 在 " android...": "$projectDir/schemas".toString() 参数 ; 完整的配置层级如下 : android { namespace 'kim.hsl.rvl' compileSdk..., 在 数据库版本 1 的基础上 , 添加 sex 字段 ; /** * 性别字段 * 数据库表中的列名为 sex * 数据库表中的类型为 INTEGER 文本类型
Room是对象关系映射型数据库,所以你可以不用写这个@ColumnInfo注解,写它主要是为了设置列名,不写则使用变量名做为列名。...假设我一个表中有30个字段,实际上用到的只有5个,那么另外25个就不需要进行创建了,则使用@Ignore注解进行忽略。...下面是数据库的创建,在db包下新建一个MyDatabase类,继承RoomDatabase,代码如下: @Database(entities = {User.class}, version = 1, exportSchema...version = 1表示数据库的版本,可以做数据库的升级操作。 注意这是一个抽象类,在编译时Room会帮助构建实现类。 现在运行一下,手机或者模拟器都可以。然后什么都不用去做。...(getApplicationContext(), MyDatabase.class, "DemoDB") //是否允许在主线程上操作数据库,默认false。
"android.arch.persistence.room:runtime:$room_version" annotationProcessor "android.arch.persistence.room...:compiler:$room_version" // optional - RxJava support for Room implementation "android.arch.persistence.room...implementation "android.arch.persistence.room:guava:$room_version" // Test helpers testImplementation..."android.arch.persistence.room:testing:$room_version" } 定义数据库 使用entities定义在数据库中存储的实体结构 使用version定义数据库版本...void migrate(@NonNull SupportSQLiteDatabase database) { // 数据库版本从1升级到2,UserData的userAge字段从
"android.arch.persistence.room:testing:$room_version" 11} Room 上面的依赖添加完成后,接下来我们可以正式使用Room。...而Room正好可以帮助我们减少代码、简化复杂度。...在Entity中可以通过使用tableName来为该表命名,这里将其命名未contacts。 除此之外,使用@ColumnInfo来标明表中的字段,@PrimaryKey来标明表的主键。...其中@ColumnInfo也可以通过(name = "name")来命名字段名。当然还有别的注释例如外键的标明:@ForeignKey DAO 数据库表建好了,现在是提供操作数据表中的数据的方法。...Room的强大之一是:它可以在编译时检测你的SQL语句是否编写正确,如果编写错误将导致编译失败。这样就可以避免App在运行时导致崩溃。这个读者可以自行测试一下。
一、背景 毫无疑问,关于Android数据库现在已经有很多流行好用的ORM框架了,比如:Room、GreenDao、DBFlow等都提供了简洁、易用的API,尤其是谷歌开源的Room是目前最主流的框架...因此感觉可以将数据库操作以网络请求的方式进行抽象和封装,其详细对比如下表所示: 通过上述相似性的对比并综合现有ORM框架来考虑切入口,首先想到的是使用注解: 主流Room使用的是编译时注解(更有利于性能...; 3、创建FooService实例: Sponsor sponsor = new Sponsor.Builder(this) .allowMainThreadQueries() //是否运行在主线程操作...不过这个工具只是展示了简单的类结构信息(仅包含类、函数、字段)而已,我们可以更进一步看一下该类对应的字节码来确认下,直接使用AS打开apk,展开classes.dex找到对应类,右键->"Show ByteCode.../+/android-room-release:room/compiler/src/main/kotlin/androidx/room/processor/ https://techblog.bozho.net
这是一篇自己从Android开发文档中翻译来的关于Room 的文档。...默认 Room 会为 每个字段在表中创建对应的字段;如果其中一些属性不想被创建在表中怎么办,那就是使用 @Ignore 注解此属性。完成实体的创建之后必须在 Database 引用。...Sqlite中表名不区分大小写[^] 就像表名一样,字段的名字默认的也是类中属性的名字如果想设置其他名字,可使用 @ColumnInfo 的 name属性 @Entity(tableName = "users...[^] 嵌套字段可以嵌套其他字段[^] 如果数据实体中有多个 嵌套字段,可以通过设置属性 prefix 加前缀的方式保证字段名不重复。...要使用此功能,需要将 Room 组中的 android.arch.persistence.room:rxjava2 组件添加到构建Gradle依赖项中,添加组件之后就可以返回 Rxjava2 中的对象
student") class Student { } @PrimaryKey 注解 定义主键 , 使用 @PrimaryKey 注解修饰主键 , 设置 autoGenerate = true 参数 可以令...开发者 使用 constructor(name: String, age: Int) 和 constructor(id: Int) 构造函数 ; /** * 默认的构造方法给 Room...( Java ) //annotationProcessor 'androidx.room:room-compiler:2.2.5' 完整代码如下 : plugins { id 'com.android.application...*/ @Ignore lateinit var studentInfo: String /** * 默认的构造方法给 Room 框架使用 */...(entities = [Student::class], version = 1, exportSchema = false) abstract class StudentDatabase: RoomDatabase
Room是一种ORM(对象关系映射)框架,可以用OOP(面向对象)的思路开发数据库,有点像早期的greenDAO,不过Room作为Jetpack的一员,能够返回更多类型的数据,比如能直接返回DataSource.Factory...Jetpack笔记代码 本文源码基于SDK 29 使用 引入依赖: def room_version = "2.2.3" implementation "androidx.room:room-runtime...:$room_version" //注解处理器,用于编译期根据注解来生成类 annotationProcessor "androidx.room:room-compiler:$room_version"...User { @PrimaryKey(autoGenerate = true) //int型的自增主键 @ColumnInfo(name = "id") //表中字段的名字...参考文章 简书-Android Room 框架学习
一、销毁 和 重建策略 在 Android 中使用 Room 操作 SQLite 数据库 , 如果 SQLite 数据库表 修改比较繁琐 , 如 : 涉及到 修改 数据库表字段的数据类型 , 需要逐个修改数据库值...1、数据库版本 3 代码示例 RoomDatabase 数据库类完整代码 package kim.hsl.rvl import android.content.Context import android.util.Log...*/ @Ignore lateinit var studentInfo: String /** * 默认的构造方法给 Room 框架使用 */...import android.util.Log import androidx.room.Database import androidx.room.Room import androidx.room.RoomDatabase...*/ @Ignore lateinit var studentInfo: String /** * 默认的构造方法给 Room 框架使用 */
的单一事实来源,允许用户在应用内查看关键信息的一致副本,无论用户是否具有互联网连接 处理重要数量的结构化数据的应用程序可以从本地保存数据中受益匪浅。...在运行时,你可以通过调用 Room.databaseBuilder()或 Room.inMemoryDatabaseBuilder()来获取 Database 实例 Entity 数据库中的表...,如果在同一张表中存在多个可能重复的字段时例如 BookA().word 和 BookB().word ,就可以使用 @ColumnInfo(name = "a_word")、 @ColumnInfo(...阶段处理一些初始化操作,比如填充默认数据等 @Database(entities = [Word::class], version = 1,exportSchema = false) public abstract...://codelabs.developers.google.com/codelabs/android-room-with-a-view-kotlin https://developer.android.com
' compile 'android.arch.lifecycle:runtime:1.0.0-alpha5' compile 'android.arch.persistence.room...:compiler:1.0.0-alpha5' annotationProcessor "android.arch.persistence.room:compiler:1.0.0-alpha5...默认Room会为entity中定义的每一个field都创建一个column。...如果一个entity中有你不想持久化的field,那么你可以使用@Ignore来注释它们,在项目的db/entities目录下: student.java //也可以使用组合主键,使用@Entity注解的...在运行时,可以通过调用Room.databaseBuilder() 或者 Room.inMemoryDatabaseBuilder()来得到它的实例。
一.Android官方ORM数据库Room Android采用Sqlite作为数据库存储。...Entity类是Sqlite中的表对java类的映射,例如有一个学生表,有id,name,age三个字段;那么对应的就有一个学生类,有id,name,age三个成员变量和学生表中的字段进行一一对应。 ...Dao:即Data Access Object,数据访问对象,就是字面意思,可以通过他来访问数据库中的数据。 ...就是建立一个从数据库表到java类的映射,表中的字段对应类中的成员变量,表中的记录对应该类的一个实例。...注解用于将Student类和Room数据库中的数据表对应起来;@PrimaryKey注解即主键约束;@ColumnInfo注解可以设置该成员变量对应的表中字段的名称以及类型 需要注意的一点是get方法不可省略
领取专属 10元无门槛券
手把手带您无忧上云