Android ORM 框架之 greenDAO

原创 2016年06月28日 10:37:24

前言

在平时的开发过程中,大家一定会或多或少地接触到 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、配置依赖

配置greendaogeneratorbuild.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数据库版本升级

版权声明:本文为博主原创文章,未经博主允许不得转载。

强大的数据库ORM框架-GreenDao增删改查篇

“前两篇博文分别阐述了如何去搭建一个GreenDao框架项目和剖析了项目中的相关源码,这让我们对GreenDao框架有了初步的了解以及如何去使用它,那么接下来就来了解GreenDao框架是如何能够在不...
  • AndrExpert
  • AndrExpert
  • 2016年12月11日 13:49
  • 1710

Android数据库ORM框架用法、源码和性能比较分析

基本用法 LitePal LitePal是一款开源的Android数据库框架,它采用了对象关系映射(ORM)的模式,LitePal很“轻”,jar包只有100k不到,使用起来也比较简单,源码地址为...
  • duanyy1990
  • duanyy1990
  • 2016年03月22日 15:06
  • 839

强大的数据库ORM框架-GreenDao项目源码剖析篇

由上一篇博文( 强大的数据库ORM框架-GreenDao项目构建篇)可知,无论通过哪一种方式我们都可以比较容易的构建出GreenDao项目,并且成功生成相关的数据库管理文件,但是这些源码文件都各有什么...
  • AndrExpert
  • AndrExpert
  • 2016年12月09日 15:19
  • 759

Android开源:数据库ORM框架GreenDao学习心得及使用总结

最近在对开发项目的性能进行优化。由于项目里涉及了大量的缓存处理和数据库运用,需要对数据库进行频繁的读写、查询等操作。因此首先想到了对整个项目的数据库框架进行优化。    原先使用android本...
  • white__cat
  • white__cat
  • 2014年10月29日 09:29
  • 4435

Android开发数据库之第三方ORM框架(GreenDao),ormgreendao

移动APP追求追求功能实现的同时,用户体验非常重要。开始APP的同时,要时刻的切换开发者的角色,如你开发的时候,是 站在APP的开发角色,处于生产者的位置;当你测试的时候,你应该把自己放在用户的角色...
  • feitianlian
  • feitianlian
  • 2015年11月25日 13:18
  • 501

SQLite数据库框架ORMLite与GreenDao的简单比较

摘要: 最近准备使用数据库做个缓存,但不知道哪个好用些
  • xushuaic
  • xushuaic
  • 2014年04月24日 21:56
  • 16290

Android ORM框架介绍之greenDao注解及加密(三)

Android ORM框架介绍之greenDao注解及加密(三)greenDao注解greendao注解还是比较多的,具体如下图所示:常用的greendao注解package www.weshared...
  • qq_33689414
  • qq_33689414
  • 2016年08月24日 22:50
  • 2611

Android ORM 框架:GreenDao 使用详解(进阶篇)

本文作者:speedy CSDN 专栏:http://blog.csdn.net/speedystone/article/details/74193053 掘金专栏:https://jue...
  • speedystone
  • speedystone
  • 2017年07月03日 14:31
  • 523

ORM对象关系映射之GreenDAO建立多表关联

利用GreenDAO可以非常方便的建立多张表之间的关联一对一关联通常我们在操作数据库的时候,我们往往不是单独的对一张表进行操作,而是对这张表的操作会联动的影响另外一张表或者多张表,比如:现在有两张表,...
  • u010687392
  • u010687392
  • 2015年09月16日 16:36
  • 9148

Android数据库工具ORM-greenDAO学习

之前没有接触过ORM概念,现在有理解了。即是一个中间层,把面向对象的操作方法转换为关系型数据库的操作。这部分不用我们去做。这样,我们可以用熟悉的、方便的面向对象的做法去操作数据库(如增删改查),避免了...
  • learn2012
  • learn2012
  • 2015年06月01日 13:21
  • 1517
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android ORM 框架之 greenDAO
举报原因:
原因补充:

(最多只允许输入30个字)