快速了解Android Room使用細則
1、前言
最近在開發(fā)中,Room用的比較多,時不時要查資料,干脆寫一篇Room的使用和Room的封裝。如果寫的不好,或者有錯誤之處,懇請在評論、私信、郵箱指出,萬分感謝??
2、添加依賴
dependencies {
implementation "androidx.room:room-ktx:2.4.0"
}
2、Entity
Entity是指代表數(shù)據(jù)庫中的表的類,可以使用注解來定義表中的列。一個Entity類應(yīng)該至少有一個主鍵字段,并且可以包含其他字段,如下面的例子所示:
@Entity(tableName = "user")
data class User(
@PrimaryKey val id: Int,
@ColumnInfo(name = "name") val name: String,
@ColumnInfo(name = "email") val email: String
)
3、DAO
DAO是指數(shù)據(jù)訪問對象,用于定義訪問數(shù)據(jù)庫的方法??梢允褂米⒔鈦碇付⊿QL查詢,也可以使用Room提供的一些查詢方法。例如,以下是一個包含一些基本查詢的DAO示例:
@Dao
interface UserDao {
@Query("SELECT * FROM user")
fun getAll(): List<User>
@Query("SELECT * FROM user WHERE id = :id")
fun getById(id: Int): User?
@Insert
fun insert(user: User)
@Update
fun update(user: User)
@Delete
fun delete(user: User)
}
4、Database
Database是指數(shù)據(jù)庫對象,包含與數(shù)據(jù)庫相關(guān)的配置信息,如版本號和實體類的列表??梢允褂米⒔鈦碇付〝?shù)據(jù)庫的配置信息和包含的實體類,如下面的例子所示:
@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
companion object {
private var INSTANCE: AppDatabase? = null
fun getInstance(context: Context): AppDatabase {
return INSTANCE ?: synchronized(this) {
val instance = Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java,
"app_database"
).build()
INSTANCE = instance
instance
}
}
}
}
5、獲取DAO實例
使用Database對象的實例方法獲取DAO接口的實例
val db = AppDatabase.getInstance(context) val userDao = db.userDao()
6、調(diào)用DAO方法
使用DAO接口的實例方法來訪問數(shù)據(jù)庫
val users = userDao.getAll() val user = userDao.getById(1) val newUser = User(2, "雞你太美", "jinitaimei@qq.com") userDao.insert(newUser) newUser.email = "jinitaimei@qq.com" userDao.update(newUser) userDao.delete(newUser)
7、使用步驟
以上是Room的三個主要組成部分,下面是使用Room的一些基本步驟:
- 添加依賴項:在項目的build.gradle文件中添加Room庫的依賴項。
- 創(chuàng)建Entity類:創(chuàng)建一個或多個Entity類來表示數(shù)據(jù)庫中的表。
- 創(chuàng)建DAO接口:創(chuàng)建一個或多個DAO接口來定義訪問數(shù)據(jù)庫的方法。
- 創(chuàng)建Database對象:創(chuàng)建一個繼承自RoomDatabase的抽象類來表示數(shù)據(jù)庫對象,并使用@Database注解指定數(shù)據(jù)庫的配置信息和包含的實體類。
- 獲取DAO實例:使用Database對象的實例方法獲取DAO接口的實例。
- 調(diào)用DAO方法:使用DAO接口的實例方法來訪問數(shù)據(jù)庫。
下面說點其他的,嘻嘻
8、事務(wù)(Transaction)
在對數(shù)據(jù)庫進行多次操作時,可以使用事務(wù)來保證數(shù)據(jù)的一致性和完整性。在Room中,可以使用@Transaction注解來指定一個方法是事務(wù),例如:
@Transaction
fun updateUserData(user: User, address: Address) {
userDao.update(user)
addressDao.update(address)
}
9、數(shù)據(jù)庫遷移
當(dāng)你需要修改數(shù)據(jù)庫架構(gòu)時,可以使用Room的數(shù)據(jù)庫遷移功能來升級或降級數(shù)據(jù)庫。在Room中,可以使用@Database注解中的version屬性來指定數(shù)據(jù)庫版本號,如果你需要進行遷移,你可以創(chuàng)建一個Migration對象,它包含了舊版本到新版本的變化信息,并將其添加到@Database注解中的migrations屬性中,例如:
@Database(entities = [User::class], version = 2, exportSchema = false,
migrations = [Migration(1, 2) { database ->
database.execSQL("ALTER TABLE user ADD COLUMN phone TEXT NOT NULL DEFAULT ''")
}]
)
abstract class AppDatabase : RoomDatabase() {
// ...
}
10、視圖(View)
在一些情況下,你可能需要使用多個表中的數(shù)據(jù)來創(chuàng)建一個視圖(數(shù)據(jù)庫視圖!不是android.view)。在Room中,你可以使用@DatabaseView注解來定義一個視圖,并使用@Query注解來指定視圖的查詢語句,例如:
@DatabaseView(
"SELECT user.id, user.name, address.city, address.country FROM user " +
"INNER JOIN address ON user.address_id = address.id"
)
data class UserAddress(
val id: Int,
val name: String,
val city: String,
val country: String
)
@Dao
interface UserAddressDao {
@Query("SELECT * FROM user_address")
fun getAll(): List<UserAddress>
}
11、Flow!
實際上也支持RXJava,但是我不喜歡RX,可以結(jié)合Room、Flow和網(wǎng)絡(luò)請求,做很酷的事情
@Dao
interface UserDao {
@Query("SELECT * FROM user WHERE id = :id")
fun getById(id: Int): Flow<User>
@Query("SELECT * FROM user")
fun getAll(): Flow<List<User>>
}
結(jié)尾
實際上,Room的應(yīng)用遠不止如此,如果有人感興趣的話,我就出下一期吧!比如封裝一個Room的數(shù)據(jù)庫層
感謝
- 校稿:ChatGpt/Bing
- 文筆優(yōu)化:ChatGpt/Bing/秘塔寫作貓
以上就是快速了解Android Room使用細則的詳細內(nèi)容,更多關(guān)于Android Room使用的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android開發(fā)之超強圖片工具類BitmapUtil完整實例
這篇文章主要介紹了Android開發(fā)之超強圖片工具類BitmapUtil,結(jié)合完整實例形式分析了Android圖片的常用操作技巧,包括圖片的加載、轉(zhuǎn)換、縮放、計算等相關(guān)操作技巧,需要的朋友可以參考下2017-11-11
Android編程開發(fā)之多點觸摸(Multitouch)實現(xiàn)方法
這篇文章主要介紹了Android編程開發(fā)之多點觸摸(Multitouch)實現(xiàn)方法,結(jié)合實例形式詳細分析了Android多點觸摸的相關(guān)實現(xiàn)步驟與操作技巧,需要的朋友可以參考下2016-08-08
Android FrameWork之SytemServer進程fork示例
這篇文章主要為大家介紹了Android FrameWork之SytemServer進程fork示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07

