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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/360770.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang笔记:使用serial包进行串口通讯

文章目录 目的使用入门总结 目的 串口是非常常用的一种电脑与设备交互的接口。这篇文章将介绍golang中相关功能的使用。 本文使用的包为 &#xff1a;go.bug.st/serial https://pkg.go.dev/go.bug.st/serial https://github.com/bugst/go-serial 另外还有一些常见的包如&…

Springboot民宿信息管理系统-计算机毕业设计源码08818

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对民宿信息管理系统等问题&#xff0c;对民宿…

大模型应用研发基础环境配置(Miniconda、Python、Jupyter Lab、Ollama等)

老牛同学之前使用的MacBook Pro电脑配置有点旧&#xff08;2015 年生产&#xff09;&#xff0c;跑大模型感觉有点吃力&#xff0c;操作起来有点卡顿&#xff0c;因此不得已捡起了尘封了快两年的MateBook Pro电脑&#xff08;老牛同学其实不太喜欢用 Windows 电脑做研发工作&am…

Ant Design Vue Cascader 级联选择 错位问题

当Cascader 多个的时候 对应的下列会错位 如果滚动 他不会跟着元素 而是会跟着屏幕滚动&#xff0c;如下效果 解决方法 在Cascader 标题添加 getPopupContainer 属性监听对应的位置&#xff0c;返回对应的元素 <a-cascader class"smart-width-100 " v-model:…

Sam Altman:从少儿奇才到OpenAI掌舵人

自2022年底发布了ChatGPT以来&#xff0c;OpenAI及其首席执行官Sam Altman迅速成为科技界的焦点人物。Altman的崛起并非偶然&#xff0c;而是长期以来不断追求权力和创新的结果。本文将回顾Altman的成长历程&#xff0c;探索他如何一步步走向OpenAI的顶峰。 童年与教育背景 S…

亚马逊云科技官方活动:一个月拿下助理架构师SAA+云从业者考试认证(送半价折扣券)

为了帮助大家考取AWS SAA和AWS云从业者认证&#xff0c;小李哥争取到了大量考试半价50%折扣券&#xff0c;使用折扣券考试最多可省75刀(545元人民币)。 领取折扣券需要加入云师兄必过班群&#xff0c;在群中免费领取。目前必过班群招募到了超过200名小伙伴&#xff0c;名额有限…

YOLOv8关键点pose训练自己的数据集

这里写自定义目录标题 YOLOv8关键点pose训练自己的数据集一、项目代码下载二、制作自己的关键点pose数据集2.1 标注(非常重要)2.1.1 标注软件2.1.2 标注注意事项a.多类别检测框b.单类别检测框2.2 格式转换(非常重要)2.3 数据集划分三、YOLOv8-pose训练关键点数据集3.1 训练…

任务3.8.4 利用RDD实现分组排行榜

文章目录 1. 任务说明2. 解决思路3. 准备成绩文件4. 采用交互式实现5. 采用Spark项目实战概述&#xff1a;使用Spark RDD实现分组排行榜任务背景任务目标技术选型实现步骤1. 准备数据2. 数据上传至HDFS3. 启动Spark Shell4. 读取数据生成RDD5. 数据处理6. 计算TopN7. 输出结果8…

Instagram 算法更新?想要吸引更多新用户请打开这些设置!

为什么你发的IG就没人看&#xff1f;没流量&#xff1f;注意了&#xff01;IG算法已更新&#xff0c;了解最新算法、学会这些设置&#xff0c;你的IG自然能吸引到越来越多用户关注&#xff01; Instagram 算法更新 1️⃣ 根据Instagram官方的表述&#xff0c;他们对算法进行了调…

分享一个好用的图幅号计算器

如果在你的工作中会分幅处理地图数据&#xff0c;也许这个好用的图幅号计算器能对你有所帮助。 你只需要在该工具中输入经纬度坐标&#xff0c;就可以为你计算出各个比例尺下的图幅号&#xff0c;你可以在文末查看该工具的领取方法。 一个好用的图幅号计算器 该图幅计算器工…

Redis的持久化方式和注意点

redis持久篇 两种持久化技术&#xff1a; AOF日志和RDB快照 Redis默认会开启RBD快照 AOF:持久化只会记录写操作命令。 是一种日志&#xff0c;写入到文件&#xff0c;有相应的格式文本 就是 Redis 里的AOF(Append Only File)持久化功能&#xff0c;注意只会记录写操作命令…

【C++STL】Vector扩容机制

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

网络安全事件研判

研判&#xff08;入侵检测&#xff09; 研判我理解为人工层面对入侵检测事件进行再分析&#xff0c;即借助已有的设备告警根据经验判断是否为真实攻击 研判工作要充分利用已有安全设备&#xff08;需要提前了解客户的网络拓扑以及部署设备情况&#xff09;&#xff0c;分析其近…

代码随想录算法训练营第三十四天|56. 合并区间、738.单调递增的数字、968.监控二叉树

56. 合并区间 题目链接&#xff1a;56. 合并区间 文档讲解&#xff1a;代码随想录 状态&#xff1a;无语&#xff0c;这题从右边界排序做不了&#xff01; 思路&#xff1a; 排序&#xff1a;按照区间的起始位置进行排序&#xff0c;这样后面处理时可以顺序合并重叠区间。合并…

记因hive配置文件参数运用不当导致 sqoop MySQL导入数据到hive 失败的案例

sqoop MySQL导入数据到hive报错 ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: Hive exited with status 64 报错解释&#xff1a; 这个错误表明Sqoop在尝试导入数据到Hive时遇到了问题&#xff0c;导致Hive进程异常退出。状态码…

【安全审核】音视频审核开通以及计费相关

融云控制台音视频审核入口&#xff1a;音视频审核 1 音视频审核文档&#xff1a;融云开发者文档 1 提示&#xff1a; 开发环境&#xff1a; 免费体验 7 天&#xff08;含 21 万分钟音频流和 420 万张视频审核用量&#xff09;&#xff0c;免费额度用尽后&#xff0c;将关停服务…

电巢科技CIOE中国光博会:激光雷达技术应用研讨会圆满落幕!

2024年6月20日&#xff0c;由CIOE中国光博会与电巢科技联合主办的“激光雷达技术应用”线上研讨会成功举行。本次线上研讨会是CIOE中国光博会与电巢科技首次联合主办的论坛&#xff0c;旨在借助双方自身资源优势&#xff0c;为行业发展提供可靠的交流平台。接下来&#xff0c;C…

Kali Linux渗透测试指南(详细教程,建议收藏)

渗透测试是对信息系统遭受实际攻击时的一种受控模拟&#xff0c;是安全中十分重要的一部分。 渗透测试人员往往会使用一些成熟的工具&#xff0c;只有全面掌握这些工具&#xff0c;我们才能更好地进行渗透。 今天就给大家分享一份Kali Linux高级渗透测试指南&#xff0c;一共…

Android开发系列(九)Jetpack Compose之ConstraintLayout

ConstraintLayout是一个用于构建复杂布局的组件。它通过将子视图限制在给定的约束条件下来定位和排列视图。 使用ConstraintLayout&#xff0c;您可以通过定义视图之间的约束关系来指定它们的位置。这些约束可以是水平和垂直的对齐、边距、宽度和高度等。这允许您创建灵活而响…

基于51单片机的RFID门禁系统-LCD12864显示

一.硬件方案 本RFID系统设计可分为硬件部分和软件部分。硬件部分以MFRC522射频识别模块为核心&#xff0c;结合主控模块STC89C52设计系统的外围硬件电路&#xff0c;实现对射频卡的控制与MCU之间的互通。软件部分采用C语言进行系统的下位机程序的开发&#xff0c;完成与IC卡之…