Android Room使用模板

1,引入依赖

plugins {
    id 'kotlin-kapt'
}
dependencies {
    implementation "androidx.room:room-runtime:2.4.2"
    kapt "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. 【c++】模板使用

    2024-04-28 11:50:05       27 阅读
  2. C# 类模板使用

    2024-04-28 11:50:05       18 阅读
  3. Android retrofit使用模板

    2024-04-28 11:50:05       45 阅读
  4. Android ViewModel使用模板

    2024-04-28 11:50:05       12 阅读
  5. Android Room使用模板

    2024-04-28 11:50:05       13 阅读
  6. 如何正确使用 HTML 模板

    2024-04-28 11:50:05       41 阅读
  7. IDEA快捷使用-快捷键&模板

    2024-04-28 11:50:05       39 阅读
  8. C++中模板使用

    2024-04-28 11:50:05       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-28 11:50:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-28 11:50:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-28 11:50:05       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-28 11:50:05       20 阅读

热门阅读

  1. 电力电子技术——PWM控制技术

    2024-04-28 11:50:05       13 阅读
  2. MySQL的约束

    2024-04-28 11:50:05       10 阅读
  3. 记录不熟悉的函数用法(C++)——insert

    2024-04-28 11:50:05       13 阅读
  4. slice

    slice

    2024-04-28 11:50:05      11 阅读
  5. Dockerfile: ENTRYPOINT和CMD的区别

    2024-04-28 11:50:05       12 阅读
  6. Python中实现多层感知机(MLP)的深度学习模型

    2024-04-28 11:50:05       10 阅读
  7. python读取文件

    2024-04-28 11:50:05       10 阅读
  8. PYTHON 访问NVD获取漏洞信息保存到本地数据库

    2024-04-28 11:50:05       12 阅读
  9. 软件安装与配置

    2024-04-28 11:50:05       8 阅读
  10. 自动化生产线的常见问题及维护方法

    2024-04-28 11:50:05       15 阅读
  11. 对象存储服务中对象业务的非标接口

    2024-04-28 11:50:05       14 阅读