Android使用DevRing框架搭建数据库实体类以及使用
一、引用DevRing依赖
//导入DevRing依赖implementation 'com.ljy.ring:devring:1.1.8'创建数据库表的依赖implementation 'org.greenrobot:greendao:3.2.2' // add libraryimplementation 'org.greenrobot:greendao-generator:3.0.0'
二、修改工程目录下的.idea->gradle.xml文件,添加:
<option name="delegatedBuild" value="false" />
三、创建生成实体类的执行类
public class TableDaoGenerator {private static void addTaskDetail(Schema schema) {//实体类1Entity entity = schema.addEntity("User");//添加id属性//entity.addIdProperty();//添加列userId,指定非空,默认可为空entity.addLongProperty("Id").primaryKey();entity.addLongProperty("userId");entity.addStringProperty("realName");entity.addStringProperty("mobile");entity.addStringProperty("createTime");entity.addStringProperty("modifyTime");entity.addStringProperty("sex");entity.addStringProperty("userPhoto");entity.addStringProperty("certificateNumber");entity.addStringProperty("employeeNo");entity.addStringProperty("terminalPassword");entity.addIntProperty("userCabinetType");entity.addStringProperty("cardNum");entity.addStringProperty("spaceNos");entity.addStringProperty("fingerId");entity.addStringProperty("bindingUserTime");entity.addStringProperty("isTestTimeout");entity.addBooleanProperty("isDelete");entity.addIntProperty("userType");entity.addStringProperty("addFromTag");entity.addStringProperty("userTypeStr");//实体类2Entity entity2 = schema.addEntity("User01");//添加id属性//entity.addIdProperty();//添加列userId,指定非空,默认可为空entity2.addLongProperty("Id").primaryKey();entity2.addLongProperty("userId");entity2.addStringProperty("realName");entity2.addStringProperty("mobile");entity2.addStringProperty("createTime");entity2.addStringProperty("modifyTime");entity2.addStringProperty("sex");entity2.addStringProperty("userPhoto");entity2.addStringProperty("certificateNumber");entity2.addStringProperty("employeeNo");//实体类...}public static void main(String[] args) throws Exception {//第一个参数是数据库版本号,第二个参数是所在包名Schema schema = new Schema(1,"been");addTaskDetail(schema);try {//第二个参数是我们前面新建的空文件夹db,这里采用绝对路径的写法new DaoGenerator().generateAll(schema, "E:\\Android\\Projects\\SpDemo\\app\\src\\main\\java\\com\\example\\spdemo\\db");} catch (Exception e) {e.printStackTrace();}}}
执行即可在db包下生成对应的实体类和配置类:
注意:
自动生成的类中都需要手动导包,每个实体类的Dao类中都需要重写hasKey(对应实体类 entity)
四、创建每个数据库表对应的管理者类GreenTableManager(继承数据库管理者基类)
//User01表
public class User01GreenTableManager extends GreenTableManager<User01, Long> {private DaoSession mDaoSession;public User01GreenTableManager(DaoSession daoSession) {this.mDaoSession = daoSession;}@Overridepublic AbstractDao<been.User01, Long> getDao() {return mDaoSession.getUser01Dao();}
}//User表
public class UserGreenTableManager extends GreenTableManager<User, Long> {private DaoSession mDaoSession;public UserGreenTableManager(DaoSession daoSession) {this.mDaoSession = daoSession;}@Overridepublic AbstractDao<User, Long> getDao() {return mDaoSession.getUserDao();}
}
五、创建GreenDBManager类继承IDBManager接口
由于GreenDao的特殊性以及具体数据表的不确定,无法很好地集成到DevRing当中。 所以需要实现IDBManager接口,在实现类中手动增加实体类对应的GreenTableManager类。
/*** author: ljy* date: 2018/3/10* description:* 由于GreenDao的特殊性以及具体数据表的不确定,无法很好地集成到DevRing当中。* 所以需要实现IDBManager接口,并通过DevRing.configureDB()方法传入。* 1.在init()中对数据库进行初始化操作,如建库建表。* 2.在putTableManager()方法中将数据表管理者存进参数map中,请记清楚key值* 后面对数据表的操作是通过DevRing.tableManager(key)方法得到数据表管理者,然后进行相关增删改查。* 3.可在本类中添加IDBManager接口以外的方法* ,然后通过DevRing.<GreenDBManager>dbManager()来调用。**/public class GreenDBManager implements IDBManager {DaoSession mDaoSession;UserGreenTableManager userGreenTableManager;User01GreenTableManager user01GreenTableManager;@Overridepublic void init() {String dbName = "intelligent_cabinet.db";Integer dbVersion = DaoMaster.SCHEMA_VERSION;Class<? extends AbstractDao<?, ?>>[] classes = new Class[]{UserDao.class,User01Dao.class,};//这里使用DevRing提供的GreenOpenHelper对DaoMaster进行初始化,这样就可以实现数据库升级时的数据迁移//默认的DaoMaster.OpenHelper不具备数据迁移功能,它会在数据库升级时将数据删除。GreenOpenHelper openHelper = new GreenOpenHelper(DevRing.application(), dbName, dbVersion, classes);DaoMaster daoMaster = new DaoMaster(openHelper.getWritableDatabase());daoMaster.createAllTables(daoMaster.getDatabase(),true);
// DaoMaster daoMaster = new DaoMaster(greenOpenHelper.getEncryptedWritableDb("your_secret"));//加密mDaoSession = daoMaster.newSession();Log.i("初始化数据开始","初始化数据开始1====================================");userGreenTableManager = new UserGreenTableManager(mDaoSession);user01GreenTableManager = new User01GreenTableManager(mDaoSession);Log.i("初始化数据开始","初始化数据开始2====================================");//查看数据库更新版本时数据迁移的logMigrationHelper.DEBUG = false;//数据库增删改查时的logQueryBuilder.LOG_SQL = false;QueryBuilder.LOG_VALUES = false;//清空缓存mDaoSession.clear();}@Overridepublic void putTableManager(SimpleArrayMap<Object, ITableManger> mapTables) {mapTables.put(User.class,userGreenTableManager);mapTables.put(User01.class, user01GreenTableManager);}
}
六、在Application的onCreate中初始化DevRing和配置上面创建的数据库管理者(GreenDBManager )
public class MainApplication extends Application
{@Overridepublic void onCreate() {super.onCreate();//初始化DecRing框架DevRing.init(this);System.out.println("=======================配置数据库管理者开始==============================================");DevRing.configureDB(new GreenDBManager());//传入GreenDao数据库的管理者System.out.println("=======================配置数据库管理者==============================================");Log.i("TAG", "onCreate: 创建执行");DevRing.dbManager().init();//创建DevRing.create();}}
七、使用
这里以插入数据和读取数据为例:
User01 user01 = new User01();user01.setUserId((long)101011);user01.setEmployeeNo("dj10101");user01.setRealName("test01");user01.setMobile("123456");user01.setCreateTime("2024-06-20");user01.setMobile("2024-06-20");user01.setSex("男");user01.setUserPhoto("1888888888");user01.setCertificateNumber("00000");user01.setEmployeeNo("10001");//插入一条用户数据DevRing.tableManager(User01.class).insertOne(user01);//获取全部用户数据String user01Sql = "select * from USER01";List list = DevRing.tableManager(User01.class).queryBySQL(user01Sql, null);
相关文章:

Android使用DevRing框架搭建数据库实体类以及使用
一、引用DevRing依赖 //导入DevRing依赖implementation com.ljy.ring:devring:1.1.8创建数据库表的依赖implementation org.greenrobot:greendao:3.2.2 // add libraryimplementation org.greenrobot:greendao-generator:3.0.0 二、修改工程目录下的.idea->gradle.xml文件&…...
高效BUG管理:定级、分类和处理流程
高效BUG管理:定级、状态跟踪与处理全流程 前言一、BUG的定义二、BUG的定级三、BUG的状态四、BUG的处理流程1. BUG报告2. BUG确认3. BUG修复4. BUG验证5. BUG关闭 五、常见问题与解决方案六、总结 前言 在测试工作中,BUG的定级和分类是一个重要环节&…...

服务器数据恢复—raid5热备盘同步失败导致阵列崩溃如何恢复数据?
服务器存储数据恢复环境&故障: 某品牌DS5300存储,包含一个存储机头和多个磁盘柜,组建了多组RAID5磁盘阵列。 某个磁盘柜中的一组RAID5阵列由15块数据盘和1块热备硬盘组建。该磁盘柜中的某块硬盘离线,热备盘自动替换并开始同步…...

Ubuntu iso 镜像下载 步骤截图说明
Ubuntu镜像下载,在这个网址: Enterprise Open Source and Linux | Ubuntu 步骤如下图所示: 1、登入网址 2、点击Get Ubuntu 3、点击Download Ubuntu Desktop 后续点击Downloadload 24.04 LTS直接下载就行 如果需要下载其它版本…...

git拉取gitee项目到本地
git安装等不做赘述。 根据需要选择不同操作 1.只是单纯拉取个项目,没有后续的追踪等操作 不需要使用git init初始化本地文件夹 新建一个文件夹用于存储项目,右键选择 git bash here 会出现命令行窗口 如果像我一样,只是拉取个项目作业&…...
力扣42.接雨水
力扣42.接雨水 前后缀数组 对于每个一个位置 求其前面最高高度pre_max[i] max(pre_max[i-1] , h[i])和后面最高高度suf_max[i] max(suf_max[i1] , h[i])当前i处的水容量 为min(pre_max[i] , suf_max[i]) - h[i] class Solution {public:int trap(vector<int>& …...
国产数据库与MYSQL兼容性?开发应该怎么选择?
国产数据库主要包括以下几种: TiDB:由 PingCAP 公司研发设计的开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库,兼容 MySQL,支持无限的水平扩展,具备强一致性和高可用等特性。 华为GaussDB…...
Spring框架中Bean的生命周期
Bean的生命周期通常指的是从创建到初始化,经过一系列的流程,最终销毁的过程。只不过,在Spring框架中,Bean的生命周期是由Spring IOC容器来管理的。在Spring中,我们定义Bean时,也可以自己指定初始化和销毁的…...
从零到一学FFmpeg:avformat_alloc_output_context2 函数详析与实战
文章目录 前言一、函数原型二、功能描述三、使用场景四、AVFormatContext 结构体五、代码实例 前言 avformat_alloc_output_context2 是FFmpeg库中的一个函数,用于为输出多媒体文件初始化一个AVFormatContext结构体。这个函数在开始输出音频、视频数据到文件之前被…...
Lua 绕过元表
Lua 绕过元表,直接访问 table 的字段。 绕过元表 rawset(table, index, value),在不触发元方法的情况下,设置 table[index] 的值为 value。 rawget(table, index),在不触发元方法的情况下,获取 table[index] 的值。…...
pip方法总结(极简快速掌握)
pip是Python的包管理工具,它允许用户从PyPI等源安装和管理额外的库和依赖。以下是关于pip使用方法的详细总结,同时附上代码演示: 一、pip的基本功能 安装包:使用pip install 包名命令可以安装指定的Python包。例如,要…...
aigc基础概念(一)
目录 一、AI 1.1、基本术语 1、Artificial Intelligence (AI) —— 人工智能 2、Generative AI —— 生成性人工智能 3、Machine Learning (ML) —— 机器学习 4、Deep Learning (DL) —— 深度学习 5、Large Language Model (LLM) —— 大型语言模型 6、Transformers …...
USB学习——12、usb初始化和插拔驱动软件流程大致框架描述
usb初始化和插拔驱动软件流程大致框架描述: 当设备启动时,usb的主机控制器设备驱动(HCD)和 usb的root hub会先初始化: 1、xhci-plat.c主机控制器驱动那里,__usb_creat_hcd创建usb主机数据结构,m…...

【ARMv8/ARMv9 硬件加速系列 2.4 -- ARM NEON Q寄存器与V寄存器的关系】
文章目录 Q 与 V 的关系向量寄存器 v 的使用赋值操作寄存器赋值总结Q 与 V 的关系 在ARMv8/v9架构中,v寄存器和q寄存器实际上是对相同的物理硬件资源的不同称呼,它们都是指向ARM的SIMD(单指令多数据)向量寄存器。这些寄存器用于高效执行向量和浮点运算,特别是在多媒体处理…...

Oracle中递归查询(START WITH……CONNECT BY……)
一、基本语法 在Oracle中START WITH……CONNECT BY……一般用来查找存在父子关系的数据,也就是树形结构的数据。 SELECT * FROM TABLE WHERE 条件3 START WITH 条件1 CONNECT BY 条件2;start with [condition]:设置起点,用来限制第一层的数…...

【云原生|K8S系列】如何创建Kubernetes job和Cronjobs 入门指南
本kubernetes教程解释了如何创建kubernetes作业和cronjobs,以及它的基础知识、用例和一些提示和技巧。 什么是Kubernetes Job? Kubernetes job和cronjob是Kubernetes对象,主要用于短期和批处理工作负载。 kubernetes作业对象基本上部署了一个pod&…...

力扣每日一题 6/23 字符串/模拟
博客主页:誓则盟约系列专栏:IT竞赛 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 520.检测大写字母【简单】 题目: 我们定义,在以下…...

Google trend搜索关键词
Google trend地址:https://trends.google.com/trends/?geoUS&hlzh-CN 1、具体的操作步骤如下: 2、Google trend搜索页面如下:...

Unity C#调用Android,IOS震动功能
最近在Unity上需要很原生移动端进行交互, 原理:新建一个android项目,把生成的app module给干掉,然后留下一个vibrationPlugin module,在这个module下写android震动代码,将这个android工程构建出来的 aar移…...
Ruby 注释
Ruby 注释 在编程中,注释是用于解释代码如何工作以及为什么这样编写的重要工具。Ruby作为一种解释型、面向对象的脚本语言,提供了灵活的注释方式,帮助开发者更好地组织和理解代码。本文将详细介绍Ruby中的注释类型、用法以及最佳实践。 Rub…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...