Android Room使用模板

ops/2024/10/18 19:28:28/

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,@PrimaryKeyval 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)@Deletefun delete(vararg user: Banner)@Updatefun 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.Roomclass DatabaseUtil private constructor(context: Context) {//双重检测单例companion object {@Volatileprivate var databaseUtil: DatabaseUtil? = nullfun getInstance(context: Context): DatabaseUtil {if (databaseUtil == null) {synchronized(DatabaseUtil::class) {if (databaseUtil == null) {databaseUtil = DatabaseUtil(context)}}}return databaseUtil!!}}val myDatabase: MyDatabaseinit {myDatabase = Room.databaseBuilder(context, MyDatabase::class.java, "my_database").allowMainThreadQueries().build()}
}

 


http://www.ppmy.cn/ops/21102.html

相关文章

opencv图片绘制图形-------c++

绘制图形 #include <opencv2/opencv.hpp> #include <opencv2/core.hpp> #include <filesystem>bool opencvTool::drawPolygon(std::string image_p, std::vector<cv::Point> points) {cv::Mat ima cv::imread(image_p.c_str()); // 读取图像&#xf…

在Docker中为Nginx容器添加多端口映射的详细指南

Nginx作为一款高性能的HTTP和反向代理服务器&#xff0c;常被用于处理网站流量、负载均衡以及反向代理等多种场景。在Docker环境中部署Nginx时&#xff0c;灵活地配置端口映射是确保服务正常运行的关键步骤之一。本文将深入探讨如何在启动Nginx Docker容器时&#xff0c;通过Do…

[linux网络编程]UDP协议和TCP协议的使用

目录 看以下内容前&#xff0c;你要先了解main函数带参数有什么用、 了解socket的相关函数接口 如果不了解socket的相关函数接口请先看我这篇文章 main函数带参数有什么用 UDP udp_server 1.生成socket文件描述符 2.填充sockaddr_in信息 3.bind 4.发&#xff08;收&…

刷题之Leetcode242题(超级详细)

242.有效的字母异位词 力扣题目链接(opens new window)https://leetcode.cn/problems/valid-anagram/ 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 示例 1: 输入: s "anagram", t "nagaram" 输出: true 示例 2…

三勾点餐系统,到店点餐,到店自取,开源点餐

“您着急的话可以扫码点餐&#xff0c;点好后凭取餐码取餐呢。”现在生活中去餐馆都能听到这样的一句话&#xff0c;扫码点餐小程序现在很多餐厅、奶茶店、火锅店等都有的一个功能&#xff0c;即方便了顾客&#xff0c;也为商家带来了许多便利。 扫码点餐越来越常见&#…

图论——基础概念

文章目录 学习引言什么是图图的一些定义和概念图的存储方式二维数组邻接矩阵存储优缺点 数组模拟邻接表存储优缺点 边集数组优缺点排序前向星优缺点链式前向星优缺点 学习引言 图论&#xff0c;是 C 里面很重要的一种算法&#xff0c;今天&#xff0c;就让我们一起来了解一下图…

vue3.0(三) Vite文件目录结构及SFC语法

文章目录 Vite介绍Vite文件目录结构SFC语法SFC 语法定义bug解决 Vite介绍 为什么使用Vite&#xff1f; 表现 与Vite的ESbuild预绑定使其比使用任何其他JS绑定器都快10到100倍。这是因为它有助于提高页面速度并将CommonJS/UMD模块转换为ESM。 基于Vite文件&#xff0c;“预绑定…

NDK 基础(一)—— C 语言知识汇总

本系列文章主要是介绍一些 NDK 开发所需的基础知识&#xff0c;目录如下&#xff1a; NDK 基础&#xff08;一&#xff09;—— C 语言知识汇总 NDK 基础&#xff08;二&#xff09;—— C 语言基础与特性1 NDK 基础&#xff08;三&#xff09;—— C 语言基础与特性2 NDK 基础…