美文网首页Android-Jetpack
Kotlin & Room & Rxjava(二

Kotlin & Room & Rxjava(二

作者: amosbake | 来源:发表于2017-08-05 22:25 被阅读177次

Entity

Entity的实例对应的是对象模型数据库中数据表的一行数据,其数据结构自然就是对应着表结构. 而这种映射结构是用注释来标明的.

  • 表名 --> 类名 @Entity(tableName = "user")
  • 列名 --> 成员变量名 @ColumnInfo(name = "first_name")
  • 存储数据类型 --> 成员变量数据类型 var name: String = ""
  • 主键 @PrimaryKey(autoGenerate = true)
  • 索引 @Entity(indices = {@Index(value = {"first_name", "last_name"}, unique = true)})
  • 外键
@Entity(indices = arrayOf(Index(value = *arrayOf("first_name", "last_name"), unique = true)))
 class User {
    @PrimaryKey
    var id: Int = 0

    @ColumnInfo(name = "first_name")
    var firstName: String? = null

    @ColumnInfo(name = "last_name")
    var lastName: String? = null

    @Ignore
    var picture: Bitmap? = null
}

@Entity(foreignKeys = arrayOf(ForeignKey(entity = User::class, parentColumns = arrayOf("id"), childColumns =  arrayOf("user_id"))))
 class Book {
    @PrimaryKey
    var bookId: Int = 0

    var title: String? = null

    @ColumnInfo(name = "user_id")
    var userId: Int = 0
}

Dao (Data Access Objects)

Dao 是数据管理层,负责对数据库进行增删改查的操作
你只需要简单地用注解标注,就能自动生成相关的代码了.值得注意的是,这些代码都需要在子线程中运行,所以用其配合Rxjava是再好不过的了

@Dao
 interface UserDao {
    @Query("SELECT * FROM user")
    fun getAll():Flowable<List<User>>

    @Insert(onConflict = REPLACE)
    fun insert(user: User)

    @Update(onConflict = REPLACE)
    fun update(user: User)

    @Delete
    fun delete(user: User)

}

Database

最后,我们来到了Database,它标注了数据库的名称,版本,包含的表.最重要的是,生成Dao的获取方法.

@android.arch.persistence.room.Database(entities = arrayOf(User::class), version = 1)
abstract class Database : RoomDatabase() {
    abstract fun userDao(): UserDao
}

当然,我们还需要一个单例来让我们获取这个数据库的实例,如下

class DataBaseHelper private constructor() {
    companion object {
        val instance by lazy(LazyThreadSafetyMode.SYNCHRONIZED) {
            DataBaseHelper()
        }

    }

    var database: Database? = null
    fun setup(context: Context) {
        database = Room.databaseBuilder(context.applicationContext, Database::class.java, "database.sqlite")
                .build()

    }

}

相关文章

网友评论

    本文标题:Kotlin & Room & Rxjava(二

    本文链接:https://www.haomeiwen.com/subject/rfewlxtx.html