Android使用DevRing框架搭建数据库实体类以及使用

news2024/11/23 15:52:38

一、引用DevRing依赖

    //导入DevRing依赖
    implementation 'com.ljy.ring:devring:1.1.8'

    创建数据库表的依赖
    implementation 'org.greenrobot:greendao:3.2.2' // add library
    implementation 'org.greenrobot:greendao-generator:3.0.0'

二、修改工程目录下的.idea->gradle.xml文件,添加:

<option name="delegatedBuild" value="false" />

 三、创建生成实体类的执行类

 

public class TableDaoGenerator {


    private static void addTaskDetail(Schema schema) {
    //实体类1
        Entity 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");


    //实体类2
        Entity 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;
    }

    @Override
    public 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;
    }

    @Override
    public 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;


    @Override
    public 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====================================");
        //查看数据库更新版本时数据迁移的log
        MigrationHelper.DEBUG = false;
        //数据库增删改查时的log
        QueryBuilder.LOG_SQL = false;
        QueryBuilder.LOG_VALUES = false;
        //清空缓存
        mDaoSession.clear();

    }

    @Override
    public 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
{
    @Override
    public 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.coloradmin.cn/o/1862549.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

游戏服务器研究二:大世界的 scale 问题

这是一个非常陈旧的话题了&#xff0c;没什么新鲜的&#xff0c;但本人对 scale 比较感兴趣&#xff0c;所以研究得比较多。 本文不会探讨 MMO 类的网游提升单服承载人数有没有意义&#xff0c;只单纯讨论技术上如何实现。 像 moba、fps、棋牌、体育竞技等 “开房间类型的游戏…

《mysql篇》--mysql常用命令

数据库操作 显示当前数据库 show databases;(database 后面要加s) 这行命令用来显示当前有多少个数据库 //mysql中有自带的四个库 创建数据库 create database 数据库名(name); 创建一个数据库 create dabase if not exists <数据库名(name)>; //如果系统有与当前创建…

13017.win10安装WSL2及CUDA开发环境

文章目录 1 win10版本1.1 关键项不能忽略 2 安装WSL2 ubuntu20.042.1 打开控制面板&#xff0c;开启虚拟子系统功能2.2 离线安装ubuntu2.2 WSL2 启动 ubuntu2.3 修改默认启动用户 3 ubuntu中安装vscode-server3.1 win10 中安装vscode3.2 ubuntu中安装vscode-server3.3 启动WSL2…

思科交换机基本配置命令

01进入特权模式enable switch>enable switch# 02进入全局配置模式configure terminal switch>enable switch#configure terminal switch(conf)# 03交换机命名hostname aptech2950以aptech2950为例 switch>enable switch#configure terminal switch(conf)#hostname apt…

如何挑选洗地机?盘点口碑最好的四大洗地机

在购买洗地机这种智能家电时&#xff0c;大家都应该格外谨慎。毕竟&#xff0c;洗地机价格不菲&#xff0c;精打细算&#xff0c;确保物尽其用才是最重要的。谁都不想花了高价买回来却让它闲置在墙角落灰尘。买之前我们还是需要对自己的需求做一个清晰的判断&#xff0c;实用性…

Webpack: 如何借助预处理器、PostCSS 等构建现代 CSS 工程环境

概述 在开发 Web 应用时&#xff0c;我们通常需要编写大量 JavaScript 代码 —— 用于控制页面逻辑&#xff1b;编写大量 CSS 代码 —— 用于调整页面呈现形式。问题在于&#xff0c;CSS 语言在过去若干年中一直在追求样式表现力方面的提升&#xff0c;工程化能力薄弱&#xff…

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

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

【zabbix】zabbix 自动发现与自动注册、proxy代理

1、配置zabbix自动发现&#xff0c;要求发现的主机不低于2台 zabbix 自动发现&#xff08;对于 agent2 是被动模式&#xff09; zabbix server 主动的去发现所有的客户端&#xff0c;然后将客户端的信息登记在服务端上。 缺点是如果定义的网段中的主机数量多&#xff0c;zabbi…

YOLOv8改进 | 主干网络| 可变形卷积网络C2f_DCN【CVPR2017】

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录&#xff1a;《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有40篇内容&#xff0c;内含各种Head检测头、损失函数Loss、B…

基于 ESP8266 和 MQ 气体传感器的微信告警系统设计与实现

接线: ESP8266MQ3vVCCGND GND A0 A0微信通知截图: 摘要:本文主要探讨了一种利用 ESP8266 微控制器与 MQ 气体传感器构建的气体检测微信告警系统。详细阐述了系统的硬件组成、软件设计以及与微信平台的交互机制。通过该系统,能够实时监测环境中的气…

vxe-表尾单元格进行合并后更改其表尾背景颜色

1.场景 在vxe-table的官网API中可以使用footer-cell-class-name给单元格添加背景颜色或者其他样式&#xff0c;但是本人场景进行了表尾合并的操作&#xff1b;参考API进行更改背景颜色失败&#xff1b; 2.解决 利用表尾css类名的区别&#xff0c;用子类选择器进行对应的选择设…

mulesoft --环境安装与搭建

1.mavenjdkpostman 2.anypoint statdio 下载安装 下载 Anypoint Studio & Mule |骡子软件 (mulesoft.com) 填好基本信息后&#xff0c;会发邮件&#xff0c;在邮件中下载&#xff0c;跳到官网下载 3注册账号 Download Anypoint Studio & Mule | MuleSoft 4.Connect…

StarRocks 存算分离成本优化最佳实践

序言 StarRocks 存算分离借助对象存储来实现计算和存储能力分离&#xff0c;而存算分离版本 StarRocks 一般来说有以下三方面成本&#xff1a; 计算成本&#xff0c;也即机器使用成本&#xff0c;尤其是运行在公有云上时存储成本&#xff0c;该部分与对象存储上存储的数据量相…

埃特巴什码加解密小程序

埃特巴什码加解密小程序 这几天在看CTF相关的课程&#xff0c;涉及到古典密码学和近代密码学还有现代密码学。 简单替换密码 Atbash Cipher 埃特巴什码(Atbash Cipher)其实可以视为下面要介绍的简单替换密码的特例&#xff0c;它使用字母表中的最后 一个字母代表第一个字母…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(十七)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 27节&#xff09; P27《26.Stage模型-UIAbility的启动模式》 本节讲解 UIAbility的启动模式&#xff1a;Stage模型的应用&#x…

语言的数据结构:树与二叉树(二叉树篇)

语言的数据结构&#xff1a;树与二叉树&#xff08;二叉树篇&#xff09; 前言概念特别的二叉树满二叉树完全二叉树 存储结构顺序存储链式存储 查找方式 前言 上文说到了树&#xff0c;有人认为二叉树是树的每一个分支都有两个子节点。其实这也对。但二叉树在此基础上还做了限…

支持离线翻译任意语言的桌面应用程序;单张图像高效生成高质量的 3D 模型;2500种色彩映射的集合,适用于matplotlib和seaborn

✨ 1: Lingo Lingo是一款支持离线翻译任意语言的桌面应用程序 Lingo 是一款支持离线翻译的桌面应用程序&#xff0c;用户可以在不连接互联网的情况下进行多语言翻译。这款软件利用了Meta公司提供的nllb-200-distilled-600M 多语言模型&#xff0c;以实现高效的翻译功能。 没…

jupyter notebook的markdown语法不起作用

在这个界面编辑&#xff0c;发现markdown你编辑的是什么就是什么&#xff0c;不起作用&#xff0c;然而点一下&#xff1a; 右上角“Notebook转发”&#xff0c;就会单独跳出一个jupyter notebook的界面&#xff0c;此时就会奏效&#xff1a;

6.25作业

1.整理思维导图 2.终端输入两个数&#xff0c;判断两数是否相等&#xff0c;如果不相等&#xff0c;判断大小关系 #!/bin/bash read num1 read num2 if [ $num1 -eq $num2 ] then echo num1num2 elif [ $num1 -gt $num2 ] then echo "num1>num2" else echo &quo…

大学生搜题神器网站?分享七个支持答案和解析的工具 #职场发展#学习方法

在现代科技的帮助下&#xff0c;大学生们有幸能够利用各种日常学习工具来提升自己的学习效果。 1.全球翻译官 是一款在线翻译语言的服务平台&#xff0c;在app中&#xff0c;用户能够在线通过语音,拍照来翻译语言&#xff0c;非常的便捷&#xff0c;也支持文字翻译哦 全球翻…