Android Room使用模板

本文介绍了如何在Android应用中使用Room库创建数据库,包括引入依赖、定义实体类、Dao接口的CRUD操作以及利用单例模式管理RoomDatabase实例。
摘要由CSDN通过智能技术生成

1,引入依赖

dependencies {
    implementation("androidx.room:room-runtime:2.4.2")
    annotationProcessor("androidx.room:room-compiler:2.4.2")
}

 2,标记实体类

import androidx.room.Entity
import androidx.room.PrimaryKey

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

3,对应的Dao类

import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import androidx.room.Update

@Dao
interface BannerDao {
    @get:Query("SELECT * FROM banner")
    val getBanners: List<Banner>

    @Query("SELECT * FROM banner WHERE 'id' = :userId")
    fun getBannerById(userId: Int): Banner?

    @Query("SELECT * FROM banner WHERE 'id' IN (:userIds)")
    fun getBannersByIds(userIds: IntArray): List<Banner>

    @Insert(onConflict = OnConflictStrategy.REPLACE) //重复时则会替换。
    fun insert(vararg user: Banner)

    @Delete
    fun delete(vararg user: Banner)

    @Update
    fun update(vararg user: Banner)

    @Query("DELETE FROM banner")
    fun deleteAll()

    @Query("SELECT COUNT(*) FROM banner")
    fun countAll():Int
}

4,RoomDatabase类

import androidx.room.Database
import androidx.room.RoomDatabase

@Database(entities = [Banner::class], version = 1,exportSchema = false)
abstract class MyDatabase:RoomDatabase() {
    abstract fun bannerDao():BannerDao
}

5,工具类

import android.content.Context
import androidx.room.Room

class DatabaseUtil private constructor(context: Context) {
    //双重检测单例
    companion object {
        @Volatile
        private var databaseUtil: DatabaseUtil? = null
        fun getInstance(context: Context): DatabaseUtil {
            if (databaseUtil == null) {
                synchronized(DatabaseUtil::class) {
                    if (databaseUtil == null) {
                        databaseUtil = DatabaseUtil(context)
                    }
                }
            }
            return databaseUtil!!
        }
    }

    val myDatabase: MyDatabase
    init {
        myDatabase = Room.databaseBuilder(context, MyDatabase::class.java, "my_database")
            .allowMainThreadQueries().build()
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值