-
一、配置依赖
plugins {
id 'kotlin-kapt'
}
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = '17'
}
}
dependencies {
implementation("androidx.room:room-runtime:2.4.2")
kapt("androidx.room:room-compiler:2.4.2")
}
-
二、标记实体类
@Entity(tableName = "banner")
data class Banner(
val desc: String,
@PrimaryKey
val id: Int,
val imagePath: String,
val isVisible: Int,
val order: Int,
val title: String,
val type: Int,
val url: String
)
- 三、封装工具类
object RoomUtil {
@Volatile
private var mDataBase: MyDataBase? = null
fun getInstance(context: Context): MyDataBase {
if (mDataBase == null) {
synchronized(this) {
if (mDataBase == null) {
mDataBase = Room.databaseBuilder(context, MyDataBase::class.java, "my_database")
.allowMainThreadQueries()
.build()
}
}
}
return mDataBase!!
}
@Database(entities = [Banner::class], version = 1)
abstract class MyDataBase : RoomDatabase() {
abstract fun bannerDao(): BannerDao
}
@Dao
interface BannerDao {
@Query("SELECT * FROM banner")
fun getBanners(): List<Banner>
@Query("SELECT * FROM banner WHERE id = :userId")
fun getBannerById(userId: Int): Banner?
@Insert(onConflict = OnConflictStrategy.REPLACE) //重复时则会替换
fun insert(user: Banner)
@Delete
fun delete(user: Banner)
@Update
fun update(user: Banner)
}
}
- 四、使用
data.forEach {
RoomUtil.getInstance(this@WelcomeActivity).bannerDao().insert(it)
}
val banner = RoomUtil.getInstance(this@WelcomeActivity).bannerDao().getBanners()[0]
RoomUtil.getInstance(this@WelcomeActivity).bannerDao().delete(banner)
RoomUtil.getInstance(this@WelcomeActivity).bannerDao().getBanners()
RoomUtil.getInstance(this@WelcomeActivity).bannerDao().getBannerById(banner.id)