Android Room 使用模版

 

文章目录

  • 一、配置依赖
    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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值