Android 数据库之GreenDAO

GreenDAO 是一款开源的面向 Android 的轻便、快捷的 ORM 框架,将 Java 对象映射到 SQLite 数据库中,我们操作数据库的时候,不再需要编写复杂的 SQL语句, 在性能方面,greenDAO 针对 Android 进行了高度优化,最小的内存开销 、依赖体积小 同时还是支持 数据库加密。

greenDAO 官网地址:greenrobot.org/greendao/

greenDAO GitHub 源码地址:greenrobot/greenDAO
 

GreenDao 特征

    1、支持 protocol buffer(protobuf) 协议
    GreenDao 支持 protocol buffer(protobuf) 协议数据的直接存储,如果你通过 protobuf 协议与服务器交互,将不需要任何的映射
    2、代码生成
    greenDAO 会根据配置信息自动生成核心管理类以及 DAO 对象
    3、性能
    所有 ORM 数据库的,greenDAO 是最快的,greenDAO 不作性能方面任何妥协

核心类介绍
1、DaoMaster:

使用 greenDAO 的入口点。DaoMaster 负责管理数据库对象(SQLiteDatabase)和 DAO 类(对象),我们可以通过它内部类 OpenHelper 和 DevOpenHelper SQLiteOpenHelper 创建不同模式的 SQLite 数据库。
2、DaoSession :

管理指定模式下的所有 DAO 对象,DaoSession 提供了一些通用的持久性方法比如插入、负载、更新和删除实体。
3、XxxDAO :

对于每个实体类, greenDAO 都会生成一个与之对应 DAO 对象,如:User 实体,则会生成一个 UserDao 类
4、Entities:

可持久化对象。通常,实体对象代表一个数据库行,使用标准 Java 属性(如一个 POJO 或 JavaBean )

集成GreenDao

1、build.gradle(Module:app)中添加配置与依赖

(1)

apply plugin: 'org.greenrobot.greendao' //添加greendao apply plugin
android {
    *
    *
}

(2)

android {
    *
    *

 // greendao配置
    greendao {
        //数据库版本号,升级时修改
        schemaVersion 1
        //生成的DAO,DaoMaster和DaoSession的包路径。默认与表实体所在的包路径相同
        daoPackage 'com.chy.greendao'
        //生成源文件的路径。默认源文件目录是在build目录中的(build/generated/source/greendao)
        targetGenDir 'src/main/java'
    }

}

(3)

//引入GreenDao数据库,存储数据
implementation 'org.greenrobot:greendao:3.3.0' // add library
//Gson依赖
implementation 'com.google.code.gson:gson:2.8.5'

2、build.gradle(Project:xxx)中添加配置

// 添加插件 更好支持GreenDao
classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0'

创建Myapplication类:

public class Myapplication extends Application {

    public static DaoSession daoSession;

    @Override
    public void onCreate() {
        super.onCreate();
        initDb();
    }

    /**
     * 数据库初始化
     * */
    public void initDb () {
//        获取SQLiteOpenHelper对象devOpenHelper
        DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(this, "mydb.db");
//        获取SQLiteDatabase
        SQLiteDatabase db = devOpenHelper.getWritableDatabase();
//        加密数据库(这句话无法运行)
        //Database database = devOpenHelper.getEncryptedWritableDb("12345");
        //DaoMaster daoMaster = new DaoMaster(database);
//        创建DaoMaster实例
//        DaoMaster保存数据库对象(SQLiteDatabase)并管理特定模式的Dao类(而不是对象)。
//        它具有静态方法来创建表或将它们删除。
//        其内部类OpenHelper和DevOpenHelper是在SQLite数据库中创建模式的SQLiteOpenHelper实现。
         DaoMaster daoMaster = new DaoMaster(db);
//        管理特定模式的所有可用Dao对象
        daoSession = daoMaster.newSession();
    }



}

 在AndroidManifest.xml添加自定义的Myapplication

创建Entity

package com.chy.table;

import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Property;
import org.greenrobot.greendao.annotation.Generated;

@Entity(nameInDb = "patrol_table")
public class PatrolTable {

    /**
     * 主键 Long型,可以通过@Id(autoincrement = true)设置自增长。
     * 通过这个注解标记的字段必须是Long,数据库中表示它就是主键,并且默认是自增的。
     */
    @Id(autoincrement = true)
    private Long id;

    /**
     * Unique 属性给数据库的列添加了一个唯一性限制。注意,SQLite也会隐式地为它创建一个索引。
     * Property :属性指定数据库的字段名称。默认是驼峰转成大写的下划线隔开的名称,比如:UserAge 转成 USER_AGE
     */
    // @Unique
    @Property(nameInDb = "patroler_massif")
    private String patrolerMassif;// 巡查地块
    @Property(nameInDb = "patroler_person")
    private String patrolerPerson;// 巡查人员
    @Property(nameInDb = "patroler_time")
    private String patrolerTime;// 巡查时间
    @Generated(hash = 2022133330)
    public PatrolTable(Long id, String patrolerMassif, String patrolerPerson,
            String patrolerTime) {
        this.id = id;
        this.patrolerMassif = patrolerMassif;
        this.patrolerPerson = patrolerPerson;
        this.patrolerTime = patrolerTime;
    }
    @Generated(hash = 824963258)
    public PatrolTable() {
    }
    public Long getId() {
        return this.id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getPatrolerMassif() {
        return this.patrolerMassif;
    }
    public void setPatrolerMassif(String patrolerMassif) {
        this.patrolerMassif = patrolerMassif;
    }
    public String getPatrolerPerson() {
        return this.patrolerPerson;
    }
    public void setPatrolerPerson(String patrolerPerson) {
        this.patrolerPerson = patrolerPerson;
    }
    public String getPatrolerTime() {
        return this.patrolerTime;
    }
    public void setPatrolerTime(String patrolerTime) {
        this.patrolerTime = patrolerTime;
    }

}

创建完entity,点击Make Project 如图所示:

如果配置正确,会在配置的包目录下自动会生成DaoMaster,DaoSession 和XXXDao 类 。

 

定义GreenDaoManager类:

/**
 * 自定义Manager
 * */
public class GreenDaoManager {

    private Context mContext;
    private PatrolTableDao mPatrolTableDao;




    // 构造函数
    private GreenDaoManager(Context context){
        mContext = context;
        mPatrolTableDao = Myapplication.daoSession.getPatrolTableDao();
    }

    /**
     * 单例
     * */
    private static GreenDaoManager INSTANCE;

    public static GreenDaoManager getInstance(Context context){
        if (INSTANCE == null){
            INSTANCE = new GreenDaoManager(context);
        }
        return INSTANCE;
    }


    //添加一条数据到数据库
    public long insertPatrolTable (PatrolTable patrolTable) {

        long flag = mPatrolTableDao.insertOrReplace(patrolTable);

       return flag;
    }

    // 批量插入数据
    public void insertPatrolTables(List<PatrolTable> patrolTableList){
        mPatrolTableDao.insertInTx(patrolTableList);
    }

    //查询所有
    public List<PatrolTable> queryPatrolTable(){
        QueryBuilder<PatrolTable> query = mPatrolTableDao.queryBuilder()
                .orderAsc(PatrolTableDao.Properties.Id);
        return query.list();
    }

    //查询地块名称
    public List<PatrolTable> queryMassif(String massifName){
        QueryBuilder<PatrolTable> query = mPatrolTableDao.queryBuilder();
        query = query.where(PatrolTableDao.Properties.PatrolerMassif.eq(massifName))
                .orderAsc(PatrolTableDao.Properties.Id);;
        return query.list();


    }

    //查询巡查人员
    public List<PatrolTable> queryPerson(String personName){
        QueryBuilder<PatrolTable> query = mPatrolTableDao.queryBuilder();
        query = query.where(PatrolTableDao.Properties.PatrolerPerson.eq(personName))
                .orderAsc(PatrolTableDao.Properties.Id);
        return query.list();
    }


    //删除指定数据
    public void deletePatrolTable(PatrolTable patrolTable){
        mPatrolTableDao.delete(patrolTable);
    }

    //更新数据
    public void updatePatrolTable(PatrolTable patrolTable){
        mPatrolTableDao.update(patrolTable);
    }


}

使用:


    private void initDB(){
        GreenDaoManager instance = GreenDaoManager.getInstance(this);
        //创建数据
        PatrolTable patrolTable = new PatrolTable();
        patrolTable.setPatrolerPerson("张三");
        patrolTable.setPatrolerMassif("南湖公园");
        patrolTable.setPatrolerTime("2023-8-8 11:21");

        /** 添加数据 **/
        long flag = instance.insertPatrolTable(patrolTable);
        System.out.println(flag);


        /** 获取数据 **/
        List<PatrolTable> patrolTables = instance.queryMassif(patrolTable.getPatrolerMassif());
        Gson gson = new Gson();
        String json = gson.toJson(patrolTables);
        System.out.println("JSON"+json);

        /** 修改数据 **/
        PatrolTable updatePatrolTable = new PatrolTable();
        updatePatrolTable.setId(1l);
        updatePatrolTable.setPatrolerPerson("李四");
        updatePatrolTable.setPatrolerMassif("西湖公园");
        updatePatrolTable.setPatrolerTime("2023-8-10 11:21");
        instance.updatePatrolTable(updatePatrolTable);

        /**
         * 获取所有数据
         * */
        List<PatrolTable> allPatrolTables = instance.queryPatrolTable();
        Gson gson2 = new Gson();
        String json2 = gson2.toJson(allPatrolTables);
        System.out.println("JSON2"+json2);

    }

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

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

相关文章

Python爬虫的解析(学习于b站尚硅谷)

目录 一、xpath  1.xpath插件的安装  2. xpath的基本使用  &#xff08;1&#xff09;xpath的使用方法与基本语法&#xff08;路径查询、谓词查询、内容查询&#xff08;使用text查看标签内容&#xff09;、属性查询、模糊查询、逻辑运算&#xff09;  &#xff08;2&a…

Apache RocketMQ 命令注入

漏洞简介 RocketMQ 5.1.0及以下版本&#xff0c;在一定条件下&#xff0c;存在远程命令执行风险。RocketMQ的NameServer、Broker、Controller等多个组件外网泄露&#xff0c;缺乏权限验证&#xff0c;攻击者可以利用该漏洞利用更新配置功能以RocketMQ运行的系统用户身份执行命…

Linux6.35 Kubernetes Pod详解

文章目录 计算机系统5G云计算第三章 LINUX Kubernetes Pod详解一、Pod基础概念1.在Kubrenetes集群中Pod有如下两种使用方式2.pause容器使得Pod中的所有容器可以共享两种资源&#xff1a;网络和存储3.kubernetes中的pause容器主要为每个容器提供以下功能4.Kubernetes设计这样的P…

W6100-EVB-PICO作为TCP Client 进行数据回环测试(五)

前言 上一章我们用W6100-EVB-PICO开发板通过DNS解析www.baidu.com&#xff08;百度域名&#xff09;成功得到其IP地址&#xff0c;那么本章我们将用我们的开发板作为客户端去连接服务器&#xff0c;并做数据回环测试&#xff1a;收到服务器发送的数据&#xff0c;并回传给服务器…

svg使用技巧

什么是svg SVG 是一种基于 XML 语法的图像格式&#xff0c;全称是可缩放矢量图&#xff08;Scalable Vector Graphics&#xff09;。其他图像格式都是基于像素处理的&#xff0c;SVG 则是属于对图像的形状描述&#xff0c;所以它本质上是文本文件&#xff0c;体积较小&#xf…

HarmonyOS应用开发的新机遇与挑战

HarmonyOS 4已经于2023年8月4日在HDC2023大会上正式官宣。对广大HarmonyOS开发者而言&#xff0c;这次一次盛大的大会。截至目前&#xff0c;鸿蒙生态设备已达7亿台&#xff0c;HarmonyOS开发者人数超过220万。鸿蒙生态充满着新机遇&#xff0c;也必将带来新的挑战。 HarmonyO…

探析STM32标准库与HAL库之间的差异与优劣

引言&#xff1a; 在嵌入式开发领域&#xff0c;STMicroelectronics的STM32系列芯片广受欢迎。STM32提供了两种主要的软件库&#xff0c;即标准库和HAL库&#xff0c;用于开发各种应用。本文将探讨这两种库之间的差异&#xff0c;比较它们的优劣&#xff0c;并分析在选择库时需…

MFC计算分贝

分贝的一种定义是&#xff0c;表示功率量之比的一种单位&#xff0c;等于功率强度之比的常用对数的10倍&#xff1b; 主要用于度量声音强度&#xff0c;常用dB表示&#xff1b; 其计算&#xff0c;摘录网上一段资料&#xff1b; 声音的分贝值可以通过以下公式计算&#xff1…

用html+javascript打造公文一键排版系统14:为半角和全角字符相互转换功能增加英文字母、阿拉伯数字、标点符号、空格选项

一、实际工作中需要对转换选项细化内容 在昨天我们实现了最简单的半角字符和全角字符相互转换功能&#xff0c;就是将英文字母、阿拉伯数字、标点符号、空格全部进行转换。 在实际工作中&#xff0c;我们有时只想英文字母、阿拉伯数字、标点符号、空格之中的一两类进行转换&a…

TDengine + Telegraf + Grafana 实现图形化服务器状态监控

TDengine Telegraf Grafana 实现图形化服务器状态监控 技术栈环境搭建安装tdenginue下载安装包解压文件运行安装文件启动td运行 taosAdapter 安装Telegraf添加yum源安装生成配置文件修改配置文件启动telegraf 安装Grafana直接yum安装安装td数据源配置启动Grafana配置数据源导…

【论文阅读】基于深度学习的时序异常检测——TransAD

系列文章链接 数据基础&#xff1a;多维时序数据集简介 论文一&#xff1a;2022 Anomaly Transformer&#xff1a;异常分数预测 论文二&#xff1a;2022 TransAD&#xff1a;异常分数预测 论文链接&#xff1a;TransAD.pdf 代码库链接&#xff1a;https://github.com/imperial…

节能延寿:ARM Cortex-M微控制器下的低功耗定时器应用

嵌入式系统的开发在现代科技中发挥着至关重要的作用。它们被广泛应用于从智能家居到工业自动化的各种领域。在本文中,我们将聚焦于使用ARM Cortex-M系列微控制器实现低功耗定时器的应用。我们将详细介绍在嵌入式系统中如何实现低功耗的定时器功能,并附上代码示例。 嵌入式系…

面试热题(最长上升子序列)

给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 输入&#xff1…

Zebec Protocol ,不止于 Web3 世界的 “Paypal”

Paypal是传统支付领域的巨头企业&#xff0c;在北美支付市场占有率约为77%以上。从具体的业务数据看&#xff0c;在8月初&#xff0c;Paypal公布的2023年第二季度财报显示&#xff0c;PayPal第二季度净营收为73亿美元&#xff0c;净利润为10.29亿美元。虽然Paypal的净利润相交去…

Docker容器监控(Cadvisor +Prometheus+Grafana)

环境部署&#xff0c;接着上一篇文章Docker容器部署&#xff08;Cadvisor InfluxDBGrafana&#xff09;开始 目录 1、先清理一下容器 2、部署Cadvisor 3、访问Cadvisor页面 4、部署Prometheus 5、准备配置 6、运行prometheus容器 7、访问prometheus页面 8、部署Grafan…

Element-ui中分页器的使用

<template>中写&#xff1a; js中写&#xff1a;

鉴源实验室丨汽车网络安全运营

作者 | 苏少博 上海控安可信软件创新研究院汽车网络安全组 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 01 概 述 1.1 背景 随着车辆技术的不断进步和智能化水平的提升&#xff0c;车辆行业正经历着快速的变革和技术进步。智能化…

docker小白第一天

docker小白第一天 docker是什么docker理念容器与虚拟机比较docker能干什么docker官网介绍docker的基本组成docker平台架构 docker是什么 系统平滑移植&#xff0c;容器虚拟化技术。即源代码配置环境版本&#xff0c;打个包形成一个镜像文件&#xff0c;即软件带环境一起安装&a…

jmeter工具测试和压测websocket协议【杭州多测师_王sir】

一、安装JDK配置好环境变量&#xff0c;安装好jmeter 二、下载WebSocketSampler发送请求用的&#xff0c;地址&#xff1a;https://bitbucket.org/pjtr/jmeter-websocket-samplers/downloads/?spma2c4g.11186623.2.15.363f211bH03KeI 下载解压后的jar包放到D:\JMeter\apache-j…

python接口自动化之使用requests库发送http请求

​ requests库 ​ 什么是Requests &#xff1f;Requests 是⽤Python语⾔编写&#xff0c;基于urllib&#xff0c;采⽤Apache2 Licensed开源协议的 HTTP 库。它⽐ urllib 更加⽅便&#xff0c;可以节约我们⼤量的⼯作&#xff0c;完全满⾜HTTP测试需求。 ​ 安装&#xff1a;cm…