文章目录
- 一、配置依赖
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)