Android ORM 框架之 greenDAO

Android开发数据库之第三方ORM框架(GreenDao) 移动APP追求追求功能实现的同时,用户体验非常重要。开始APP的同时,要时刻的切换开发者的角色,如你开发的时候,是 站在APP的开发角色,处于生产者的位置;当你测试的时候,你应该把自己放在用户的角色上去考虑所做的APP了。举一个很简单的 例子,就像我们天天使用手机上的新闻、好友动态等,当你没有网络的时候,也还有数据的存在提供用户浏览,而不是一篇”白 色“的,如同电脑死机一般。这就是移动APP在开发的时候,提供了最后一次网络状态下的数据缓存,提到数据缓存,可想而知有内 存缓存、硬件缓存之分。在这我主要讲述的是 阅读详情

前言

在平时的开发过程中,大家一定会或多或少地接触到 SQLite。然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等。所以,适用于 Android 的ORM 框架也就孕育而生了,现在市面上主流的框架有 OrmLite、SugarORM、Active Android、Realm 与 GreenDAO。那就来说说greenDAO吧,下面,我将详解地介绍如何在 Android Studio 上使用 greenDAO,并结在这里记录下使用上的一些心得。

关于greenDAO

这里写图片描述
简单的讲,greenDAO是一个将对象映射到SQLite数据库中的轻量级、快速的ORM解决方案。

greenDAO is a light & fast ORM solution that maps objects to SQLite databases.

greenDAO的设计目标

  • 一个精简的库
  • 性能最大化
  • 内存开销最小化
  • 易于使用的APIs
  • 对Android进行高度的优化

greenDAO设计主要特点

  • greenDAO性能远远高于ORMLite和ActiveAndroid,官方有测试结果
  • greenDAO支持 protocol buffer(protobuf)协议数据的直接存储,如果你通过protobuf协议与服务器交互,将不需要任何映射。
  • 与ORMLite等使用的注解方式的ORM框架不同,greenDAO使用的是Code generation的方式,这也是其性能大幅度提升的原因

生成项目代码

这里写图片描述
要生成项目代码需要在我们的项目里面新建一个纯Java Project用于生成Android工程中需要使用到的Bean、DAO、DAOMaster、DaoSession等类。
具体的详见官方文档说明

使用过程

一、在Android工程中配置greenDao Generator模块

1、建立目录

在.src/main目录下新建一个与java同层级的目录名字叫做 java-gen,用于存放由greenDAO生成的文件。
这里写图片描述

新建后目录如下

这里写图片描述

2、配置工程

配置Android工程app的build.gradle添加依赖和源代码目录设置

在android节点下面加入

    sourceSets{
        main{
            java.srcDirs =['src/main/java','src/main/java-gen']
        }
    }

把原来的java目录和刚才新建的java-gen目录都设置为源码目录
设置之后你编译一下你会发现原来的java-gen显示的颜色已经变成了蓝色和原来的java目录是一样的如下图。

这里写图片描述

这样说明目录已经配置好了

下面接着添加依赖,在dependencies节点下面添加依赖
截至发表前最新的稳定版本为2.2.1

compile 'org.greenrobot:greendao:2.2.1'

二、搭建greenDAO Generator纯java工程模块

1、新建模块

通过 File -> New -> New Module -> Java Libary 新建
这里写图片描述

这里写图片描述

这里写图片描述

2、配置依赖

配置greendaogenerator的build.gradle添加依赖
在dependencies节点中添加

compile 'org.greenrobot:greendao-generator:2.2.0'

3、编写greenDAOGen类

编写greenDAOGen类用以输出greenDAO Generator,你可以在这个类中通过对象,关系等创建数据库结构。
具体请看代码。

package com.greendao.gen;

import de.greenrobot.daogenerator.DaoGenerator;
import de.greenrobot.daogenerator.Entity;
import de.greenrobot.daogenerator.Property;
import de.greenrobot.daogenerator.Schema;

public class greenDAOGen {
    /**
     * 生成代码包名
     */
    public static final String PACKAGE_NAME = "com.xxxx.xxx";
    /**
     * 版本号
     */
    public static final int SCHEMA_VERSION = 1;
    /**
     * <p> /表示根目录</p>
     * <p> ./表示当前路径</p>
     * <p> ../表示上一级父目录<p>
     */
    public static final String OUT_DIR = "./app/src/main/java-gen";
    /**
     * 实体表名
     */
    public static final String TB_SUBJECT = "TBSubject";
    /**
     * 实体表名
     */
    public static final String TB_COURSE = "TBCourse";
    /**
     * 实体表名
     */
    public static final String TB_CLASS = "TBClass";

    public static void main(String[] args) {
        // 正如你所见的,你创建了一个用于添加实体(Entity)的模式(Schema)对象。
        Schema schema = new Schema(SCHEMA_VERSION, PACKAGE_NAME);
        //当然,如果你愿意,你也可以分别指定生成的 Bean 与 DAO 类所在的目录,只要如下所示:
        //Schema schema = new Schema(1, "me.itangqi.bean");
        //schema.setDefaultJavaPackageDao("me.itangqi.dao");

        // 模式(Schema)同时也拥有两个默认的 flags,分别用来标示 entity 是否是 activie 以及是否使用 keep sections。
        // schema2.enableActiveEntitiesByDefault();
        // schema2.enableKeepSectionsByDefault();

        // 一旦你拥有了一个 Schema 对象后,你便可以使用它添加实体(Entities)了。
        addEntities(schema);

        // 最后我们将使用 DAOGenerator 类的 generateAll() 方法自动生成代码,此处你需要根据自己的情况更改输出目录(既之前创建的 java-gen)。
        // 其实,输出目录的路径可以在 build.gradle 中设置,有兴趣的朋友可以自行搜索,这里就不再详解。
        try {
            new DaoGenerator().generateAll(schema, OUT_DIR);
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("生成失败");
        }
    }

    /**
     * 创建实体关系
     *
     * @param schema
     */
    private static void addEntities(Schema schema) {

        // 一个实体(类)就关联到数据库中的一张表,此处表名为「TB_SUBJECT」(既类名)
        Entity subject_entity = schema.addEntity(TB_SUBJECT);
        // 你也可以重新给表命名
        // subject_entity.setTableName("TBSUBJECT");

        // greenDAO 会自动根据实体类的属性值来创建表字段,并赋予默认值
        // 接下来你便可以设置表中的字段:
        subject_entity.addIdProperty().autoincrement().getProperty();
        subject_entity.addStringProperty("name");
        subject_entity.addStringProperty("summary");

        Entity course_entity = schema.addEntity(TB_COURSE);
        course_entity.addIdProperty().autoincrement().getProperty();
        //创建外键关系
        Property subject_fkProperty = course_entity.addLongProperty("sub_id").notNull().getProperty();
        course_entity.addToOne(subject_entity, subject_fkProperty);
        course_entity.addStringProperty("name");
        course_entity.addStringProperty("summary");
        course_entity.addStringProperty("url");

        Entity class_entity = schema.addEntity(TB_CLASS);
        class_entity.addIdProperty().autoincrement().getProperty();
        // 与在 Java 中使用驼峰命名法不同,默认数据库中的命名是使用大写和下划线来分割单词的。
        // For example, a property called “creationDate” will become a database column “CREATION_DATE”.
        Property fkProperty = class_entity.addLongProperty("c_id").notNull().getProperty();
        class_entity.addToOne(course_entity, fkProperty);
        class_entity.addStringProperty("name");
        class_entity.addStringProperty("summary");
        class_entity.addStringProperty("filename");
    }

}

三、运行生成DAO文件

执行generator工程就会在控制台看到日志。如果看到类似如下日志并且在刚才的java-gen文件夹中出现了日志中出现的文件那么说明你成功了。
这里写图片描述

这里写图片描述

附录

http://greenrobot.org/greendao/documentation/introduction/

https://docs.gradle.org/currevnt/dsl/index.html

GreenDAO数据库版本升级

Android ORM 框架 GreenDao 使用详解(1) Android进阶学习全套手册Android对标阿里P7学习视频BATJ大厂Android高频面试题最后,借用我最喜欢的乔布斯语录,作为本文的结尾:人这一辈子没法做太多的事情,所以每一件都要做得精彩绝伦。你的时间有限,所以不要为别人而活。不要被教条所限,不要活在别人的观念里。不要让别人的意见左右自己内心的声音。最重要的是,勇敢的去追随自己的心灵和直觉,只有自己的心灵和直觉才知道你自己的真实想法,其他一切都是次要。 阅读详情

相关推荐

Android ORM 框架 GreenDao 使用详解,总结一下

============================================================================= 5.1、准备工作 5.1.1、引入 greenDAO greenDAO 的引入非常简单,我们只要按照 github 文档 上去做就可以了,具体如下所示: 5.1.2、创建实体类 @Entity public class GoodsModel implements Parcelable { @Id(autoincrement = true) priva

m0_66145060的博客 531

Android greendao 使用配置

Android greendao的配置和使用方法

lqw_qgf的博客 1215

从硬件到软件:深度解析D435i USB SCP overflow错误的根源与解决方案

本文深入解析Intel RealSense D435i相机在ROS环境下常见的'USB SCP overflow'错误,特别是与`control_transfer`相关的错误提示。从硬件配置到软件优化,详细介绍了如何通过调整USB接口、优化`rs_camera.launch`参数、更新固件驱动等方法解决数据传输溢出问题,提升设备稳定性和性能。

yy01234的博客 771

Android 数据库框架 —— GreenDao

1. 配置Gradle 添加GreenDao插件支持,要添加的内容后面都已经加上了简单注释 buildscript { repositories { jcenter() mavenCentral() // 添加远程仓库地址 } dependencies { classpath 'com.android.tools....

baipenggui_bo 607

机器学习参数寻优:方法、实例与分析

机器学习模型的性能很大程度上依赖于其参数的选择。参数寻优(Hyperparameter Tuning)是提升模型表现的关键步骤之一。本文将详细介绍主流的参数寻优方法,包括网格搜索(Grid Search)、随机搜索(Random Search)、贝叶斯优化(Bayesian Optimization)、和超参数优化库(如Optuna和Hyperopt)等,并探讨它们的优缺点及适用场景。

甜盐的博客 2841

Windows 10下Carla 0.9.15安装避坑指南:从下载到运行的全流程解析

本文详细解析了在Windows 10系统上安装和运行Carla 0.9.15自动驾驶仿真平台的全流程。内容涵盖从系统环境准备、资源下载、Python依赖安装,到首次启动验证及常见错误(如DLL缺失、显卡驱动问题)的深度解决方案,旨在帮助用户快速搭建稳定的开发环境,并运行第一个自动驾驶Python脚本。

alice7model的博客 546

GreenDao简单导入

新建City.java,然后rebuild,会自动生成构造方法和setget方法。

weixin_46649010的博客 1122

基于C#的跨平台上位机开发:一次编写,多平台运行

摘要: 本文探讨了如何利用C#进行跨平台上位机开发,以适配Windows、Linux、macOS等多平台需求。通过分析传统单平台开发的局限性(如API差异、硬件接口兼容性),提出基于.NET 5/6/7的解决方案,重点推荐Avalonia(类WPF的跨平台UI框架)和GtkSharp(基于GTK+)实现图形界面。同时,针对硬件通信需求,介绍了System.IO.Ports串口通信和LibUsbDotNet的跨平台支持,并强调多平台调试(VS Code、Docker)的重要性,最终实现一次编码、多端部署的高效

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1409

Android Studio 4.1配置GreenDao以及详细使用

导入依赖 1.在app级build.gradle中添加代码: implementation 'org.greenrobot:greendao:3.3.0' greendao { schemaVersion 1 //数据库版本号 daoPackage 'com.example.test.greendao' //填写自己的包名+文件夹test // 设置DaoMaster、DaoSession、Dao 包名 targetGenDir 'src.m

weixin_45942645的博客 3040

树莓派与无人机协同实战:基于OpenCV的地标识别优化策略

本文深入探讨了基于树莓派与无人机的协同系统,重点分享了利用OpenCV优化地标识别以实现精准降落的实战策略。内容涵盖从应对复杂光照的图像预处理、鲁棒的轮廓几何过滤,到通过ROS进行稳定通信,以及实现分层控制与状态机设计,旨在提升系统在真实环境中的可靠性与性能。

y2z3a4b5c的博客 1086

I2C通信协议SCL与SDA引脚特性:核心要点总结

深入讲解I2C通信协议中SCL和SDA引脚的工作机制与电气特性,帮助理解i2c通信协议的稳定传输原理,掌握上拉电阻配置与信号时序控制要点。

weixin_42103128的博客 2735

GreenDao 3.0 简介、使用及踩坑

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

ZhangRui的博客 1万+

MZI and MI Optical Waveguide(马赫曾德与迈克尔逊光波导)

注意,这里的 “镜子” 并不是真的在波导中做一个镜子出来,而是通过使用一个 1x2 的 MMI 结构将 MMI 输出的两个端口连接起来形成一个 “宽带镜子”。对于这里形成镜子的详细原理,后面有时间了我们再做更加详细地介绍。,它由一个 splitter 构成和两个仿佛带有 “镜子” 的臂组成。相比较于 MZI,光波可以在它的臂中传输,最终从进光口处出去得到相长或者相消干涉,很明显,在。)的折射率,从而使得两个臂上产生的相位差值不同,最终得到相长或者相消干涉的结果。这里,给大家介绍一下。,它更像是一个折叠的。

u011699626的博客 2452

Android ORM 框架 GreenDao 使用详解,快手安卓面试题

greenDAO 的引入非常简单,我们只要按照 github 文档 上去做就可以了,具体如下所示: 5.1.2、创建实体类 @Entity public class GoodsModel implements Parcelable { @Id(autoincrement = true) private Long id; @Index(unique = true) private Integer goodsId; private String name; private String icon; priva

m0_64603776的博客 228

损失函数大汇总(五十三)(Boundary Loss附公式推导与代码)

摘要 Boundary Loss是一种针对图像分割任务的新型损失函数,特别适用于高度类别不平衡的细粒度分割场景。与传统的区域型损失(如Dice、交叉熵)不同,它通过计算预测边界与真实边界之间的距离来优化模型,更关注边界精度而非区域重叠。核心思想是利用距离图(distance map)将边界约束转化为区域积分形式,实现端到端训练。具体实现中,损失函数为预测概率与距离图的点积,梯度仅取决于距离图,具有明确的空间引导性。相比区域型损失,Boundary Loss能更好处理小目标、细长结构等边界敏感任务,可与Dic

悦学共鸣,温柔以待,汇聚光芒,共同成长 240

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Android ORM框架 GreenDao 的使用详解

一、前言 关于 Android 中常用的数据存储方式我们前面已经讲了 Sp 存储 和 文件存储,但是对于数据量比较大,并且结构复杂的数据我们想要存储只能通过数据库进行处理,Android 中提供了一个 SQLite 数据库,但是使用起来比较繁琐和复杂,所以 Android 又推出了 Room 持久性库,Room 持久性库在 SQLite 的基础上提供了一个抽象层,让用户能够在充分利用 SQLite 的强大功能的同时,获享更强健的数据库访问机制。但是我们今天不讲 Room 这个组件(以后讲 Jetpack

weixin_38478780的博客 1165

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Android ORM 框架之 greenDAO应用基础

greenDAO是时下Android最流行的一款ORM框架,其性能高,可加密,使用简洁,做android开发,如果会使用它,工作量会大大减小。其性能与其他ORM框架之比较可以查阅其官网。 目前greenDAO版本为3.1.1,greenDAO3相较于greenDAO2发生了较大的改变:可以使用注解声明schemas和实体。有两种方式使用greenDAO3,一种是使用java库的形式(greenDA

欸奥维 6174

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【Android 进阶】ORM 框架之 greenDAO学习笔记

前言 当初学习Hibernate的时候就非常惊叹这种ORM思想,后来才知道原来Android中也有这种基于ORM思想的开源框架greenDAO。 greenDAO简介: 简单的讲,greenDAO 是一个将对象映射到 SQLite 数据库中的轻量且快速的 ORM 解决方案。(greenDAO is a light & fast ORM solution that maps objects t

Veyron_wu 1098

Android ORM框架GreenDao用法

Android ORM框架GreenDao用法0 简介android 上的ORM框架主要有两个:ormlite 和 GreenDAO,本篇主要介绍GreenDao的用法,原因是GreenDAO的速度快,关于ormlite和GreenDao的性能对比,请看这篇文章:[http://www.open-open.com/lib/view/open1438065400878.html][1] GreenD

梧桐那时雨 1541

GreenDAO—Android ORM框架(一)

内容介绍:GreenDAO框架的介绍和使用 最新更新时间:2016/7/5 12:00 官网:http://greenrobot.org/greendao/ 版本:V2.2.1 Bug fix release (2016-05-24) 说明:主要内容均翻译自官网最新的开发文档 博客地址:http://blog.csdn.net/kevindgk/article/det

一路向东 2790

Android ORM 框架 GreenDao 使用详解

一、前言 关于 Android 中常用的数据存储方式有 Sp 存储 和 文件存储,但是对于数据量比较大,并且结构复杂的数据我们想要存储只能通过数据库进行处理,Android 中提供了一个 SQLite 数据库,但是使用起来比较繁琐和复杂,所以 Android 又推出了 Room 持久性库,Room 持久性库在 SQLite 的基础上提供了一个抽象层,让用户能够在充分利用 SQLite 的强大功能的同时,获享更强健的数据库访问机制。但是我们今天不讲 Room 这个组件(以后讲 Jetpack 组件的时候再讲)

鸿蒙开发知识记录 1008

android ORM框架--greenDao简介

数据库是开发过程中经常要打交道的模块,android的sqlite的基本操作也是基本功。相对于传统的自己封装sql语句实现业务逻辑的增删改查,ORM框架的出现大大简化了数据库开发的成本。把我们从纷繁复杂的sql世界回归到熟悉的面向对象的世界。简单介绍下ORM的概念,其全称叫做对象关系映射(Object Relation Mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的

yjm的专栏 1236

android 连接mysql orm_Android ORM框架 GreenDao 的使用详解

一、前言关于 Android 中常用的数据存储方式我们前面已经讲了 Sp 存储和文件存储,但是对于数据量比较大,并且结构复杂的数据我们想要存储只能通过数据库进行处理,Android 中提供了一个 SQLite 数据库,但是使用起来比较繁琐和复杂,所以 Android 又推出了 Room 持久性库,Room 持久性库在 SQLite 的基础上提供了一个抽象层,让用户能够在充分利用 SQLite 的强...

weixin_29065791的博客 304
上一篇: Android 命名规范 (提高代码可以读性)
下一篇: 让Gradle支持中文 -- 关于 "编码 GBK 的不可映射字符"错误的解决
YLBF_DEV
博客等级 码龄12年 30粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值