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

一、引用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);

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java算法】滑动窗口 下

​ ​ &#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【算法工作坊】算法实战揭秘 &#x1f98c;一.水果成篮 题目链接&#xff1a;904.水果成篮 ​ 算法原理 算法原理是使用“滑动窗口”&#xff08;Sliding Window&#xff09;策略&#xff0c;结…

SD卡无法读取:原因解析与数据恢复策略

一、SD卡无法读取的尴尬场景 在数字化日益普及的今天&#xff0c;SD卡作为便携式存储设备&#xff0c;广泛应用于各类电子设备中。然而&#xff0c;当您急需访问SD卡中的数据时&#xff0c;却发现设备无法读取SD卡&#xff0c;这无疑是一个令人沮丧的场景。SD卡无法读取可能表…

SUSE linux 15的网络管理

1 手工配置网络 wicked提供了一种新的网络配置框架。自SUSE 12起&#xff0c;SUSE使用了新的网络管理工具wicked&#xff0c;这个是区别与其他常见发行版的。常见的发行版目前大多使用的是NetworkManager服务进行网络管理。 1.1 wicked网络配置 传统网络接口管理面临的挑战之…

段,页,段页,三种内存(RAM)管理机制分析

段&#xff0c;页&#xff0c;段页 是为实现虚拟内存而产生的技术。直接使用物理内存弊端&#xff1a;地址空间不隔离&#xff0c;内存使用效率低。 段 段&#xff1a;就是按照二进制文件的格式&#xff0c;在内存给进程分段&#xff08;包括堆栈、数据段、代码段&#xff09;。…

Python 算法交易实验72 QTV200第一步: 获取原始数据并存入队列

说明 最近的数据流往前进了一步&#xff0c;我觉得基本可以开始同步的推进QTV200了。上次规划了整体的数据流&#xff0c;现在开始第一步。 内容 1 结构位置 这是上次的总体图&#xff1a; 以下是这次要实现的一小部分&#xff1a; 从结构上&#xff0c;这个是整体数据流的…

每日AI资讯-20240622

1. 可灵AI全新功能上线&#xff01; 可灵AI全新功能上线&#xff01;图生视频和视频续写来啦&#xff01; 图生视频&#xff1a;上传任意图片&#xff0c;生成5秒精彩视频。支持添加提示词控制图像运动视频续写&#xff1a;对生成视频一键续写4&#xff5e;5秒&#xff0c;支持…

LeetCode:经典题之1491、896 题解与延伸

系列目录 88.合并两个有序数组 52.螺旋数组 567.字符串的排列 643.子数组最大平均数 150.逆波兰表达式 61.旋转链表 160.相交链表 83.删除排序链表中的重复元素 389.找不同 1491.去掉最低工资和最高工资后的工资平均值 896.单调序列 206.反转链表 92.反转链表II 141.环形链表 …

基于uni-app和图鸟UI开发上门服务小程序

一、技术栈选择 uni-app&#xff1a;我们选择了uni-app作为开发框架&#xff0c;因为它基于Vue.js&#xff0c;允许我们编写一次代码&#xff0c;发布到多个平台&#xff0c;包括iOS、Android、Web以及各种小程序。uni-app的丰富组件库、高效的状态管理以及便捷的预览调试功能&…

LightGBM算法详解

LightGBM算法详解 LightGBM&#xff08;Light Gradient Boosting Machine&#xff09;是由微软开发的高效梯度提升决策树&#xff08;GBDT&#xff09;实现。它以速度和效率著称&#xff0c;特别适用于大规模数据集和高维特征的场景。本文将详细介绍LightGBM的原理、特点、常用…

用于世界上最先进的医疗应用的精密电阻器

EAK的高性能电阻器使医疗产品设计人员能够继续改善全球患者的生活质量。我们的电阻器专为用于医疗诊断、治疗和预防的各种产品而设计。从小型植入式和非侵入性设备到大型诊断成像设备&#xff0c;医疗制造商之所以选择EAK 电阻器&#xff0c;是因为操作环境是高电压和磁场&…

AI-算力产业链之存力

在数字经济大潮下&#xff0c;数据已经成为新型的生产资料。 目前数据中心有三大力量&#xff1a;计算的力量——算力、存储的力量——存力、运输的力量——运力&#xff0c;即网络的力量。 算力产业链正在火热发展的同时&#xff0c;存力的需求也大幅度提升。2023年上半年&…

总结 CSS 选择器的常见用法

一&#xff0c;什么是css 在前端网页中&#xff0c;css就相当于化妆术&#xff0c;把一个很生硬的网页页面变得排版有序起来。 CSS可以对网页中的元素位置进行像素级精准控制&#xff0c;实现美化页面的效果&#xff0c;也能做到页面的样式和结构分离。 二&#xff0c;css的基…

MySQL中的ibd2sdi—InnoDB表空间SDI提取实用程序

ibd2sdi 是一个用于从 InnoDB 表空间文件中提取序列化字典信息&#xff08;Serialized Dictionary Information, SDI&#xff09;的实用程序。这个实用程序可以用于提取存储在持久化 InnoDB 表空间文件中的 SDI 数据。 可以对以下类型的表空间文件使用 ibd2sdi&#xff1a; 每…

消息认证码解析

1. 什么是消息认证码 消息认证码(Message Authentication Code)是一种确认完整性并进行认证的技术&#xff0c;取三个单词的首字母&#xff0c;简称为MAC。 消息认证码的输入包括任意长度的消息和一个发送者与接收者之间共享的密钥&#xff0c;它可以输出固定长度的数据&#x…

C语言之详解预处理

前言&#xff1a; 预处理也叫预编译&#xff0c;是编译代码时的第一步&#xff0c;经过预处理后生成一个.i文件&#xff0c;如果不明白编译与链接作用的小伙伴可以先看看博主的上一篇博客—— &#xff0c;不然知识连贯性可能会显得很差哦。 正文目录&#xff1a; 预定义符号#…

discuz迪恩cul!教育课程培训网站模板

Discuz x3.2模板 迪恩cul!教育课程培训 GBK&#xff0c;程序包中内附详细的安装教程&#xff0c;下载后按照教程安装即可 discuz迪恩cul!教育课程培训网站模板

qemu 安装ubuntu22.04虚拟机 -纯命令行-可ssh-带网络-编译安装 linux kernel-编译安装 kernel module

tar -xjf xxx.tar.bz2 1&#xff0c;预备系统盘数据 1.1 下载光盘 注意需要 liver-server $ wget https://releases.ubuntu.com/22.04.4/ubuntu-22.04.4-live-server-amd64.iso 1.2 挂载并拷贝 $ sudo mkdir /mnt/iso_ubuntu-22.04.4-live-server-amd64 $ sudo mount u…

星闪指向遥控,做家电交互的破壁人

“面壁者罗辑&#xff0c;我是你的破壁人。” 科幻小说《三体》中&#xff0c;当人类的基础科学被三体人封锁&#xff0c;变得停步不前&#xff0c;人类启动了自救的面壁计划&#xff0c;通过一次又一次破壁&#xff0c;找到战胜三体人的办法。 现实中&#xff0c;有一点已经成…

html--好看的手机充值单页

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>线上充值-首页</title><meta content"widthdevice-width,initial-scale1.0,maximum-scale1.0,user-scalable0" name"viewport&…

【Vue-Vben-Admin】1、初次运行和介绍

【Vue-Vben-Admin】1、初次运行和介绍 Vben-Admin 初次运行和介绍 小小的介绍规定版本文件树安装依赖运行项目 小小的介绍 一款 Vue3 Typescript4 Vite2 后台管理项目&#xff0c;功能挺多的&#xff0c;还有组件库 规定版本 此个人文档规定版本为 2.8.0&#xff0c;可能版本…