Kotlin & Room & Rxjava(二)

Entity

Entity的實(shí)例對(duì)應(yīng)的是對(duì)象模型數(shù)據(jù)庫中數(shù)據(jù)表的一行數(shù)據(jù),其數(shù)據(jù)結(jié)構(gòu)自然就是對(duì)應(yīng)著表結(jié)構(gòu). 而這種映射結(jié)構(gòu)是用注釋來標(biāo)明的.

  • 表名 --> 類名 @Entity(tableName = "user")
  • 列名 --> 成員變量名 @ColumnInfo(name = "first_name")
  • 存儲(chǔ)數(shù)據(jù)類型 --> 成員變量數(shù)據(jù)類型 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 是數(shù)據(jù)管理層,負(fù)責(zé)對(duì)數(shù)據(jù)庫進(jìn)行增刪改查的操作
你只需要簡單地用注解標(biāo)注,就能自動(dòng)生成相關(guān)的代碼了.值得注意的是,這些代碼都需要在子線程中運(yùn)行,所以用其配合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,它標(biāo)注了數(shù)據(jù)庫的名稱,版本,包含的表.最重要的是,生成Dao的獲取方法.

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

當(dāng)然,我們還需要一個(gè)單例來讓我們獲取這個(gè)數(shù)據(jù)庫的實(shí)例,如下

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()

    }

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容