• 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
    
        @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
    
        @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()
        }
    }

     

  • 相关阅读:
    Pyqt Model View 的使用方法
    计网第五章(运输层)(七)(TCP的连接建立)
    uniapp中如何把通过uni.chooseImage上传的图片转换成base64格式
    react源码分析:深度理解React.Context
    DllMain 入口点
    5G技术的应用和发展
    ESP32网络开发实例-WebSocket服务器
    039Node.js后端路由封装与独立拆分解决方案
    SpringMVC框架中DispatcherServlet分发请求给对应处理器
    API对接是什么意思,技术分享
  • 原文地址:https://blog.csdn.net/halong99/article/details/138173603