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数据库版本升级

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

相关文章推荐

Android_ORM框架_GreenDao

  • 2017年08月09日 15:39
  • 21.44MB
  • 下载

Android ORM框架之 greenDAO

  • 2016年05月09日 18:33
  • 8.22MB
  • 下载

<转>Android ORM 框架子 greenDao 使用心得

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0727/3223.html ORM 框架之 greenDAO ...
  • Rodulf
  • Rodulf
  • 2016年02月22日 19:17
  • 701

Android ORM 框架:GreenDao的使用,只需看一遍就会

前言这篇文章主要讲的是GreenDao的使用,可能初次接触到GreenDao的android开发者,对他并不熟悉,不知道这是个什么样的框架,提到这个框架,我需要提到的是android数据库开发经常会用...

Android ORM框架GreenDao入门学习

没有开发过Android项目,
  • god_wot
  • god_wot
  • 2014年11月16日 15:55
  • 10932

GreenDAO 3.x官方文档 — Android ORM框架(二)

GreenDAO 3.x — Android ORM框架(二) 内容介绍:GreenDAO框架的介绍和使用 最新更新时间:2016/8/1 官网:http://greenrobot.o...

Android ORM框架 GreenDao3.0的使用

前言之前用过许多的Orm框架,例如:ORMLite、greendao、ormndroid、androrm、ActiveAndroid,SugarORM等等,不过都没有一一研究,感觉GreenDao的文...

Android ORM框架之greenDAO

一、什么是ORM? ORM是object relation mapping的缩写,即对象关系映射,简单的说就是对象模型和关系模型的一种映射。ORM基于三个核心原则,简单:以最基本的形式建模数据;传达...

android数据库ORM框架GreenDao

在开发Android应用时,保存数据有这么几个方式, 一个是本地保存,一个是放在后台(提供API接口),还有一个是放在开放云服务上(如 SyncAdapter 会是一个不错的选择)。 对于...

Android Orm框架(GreenDao)

最近在对开发项目的性能进行优化。由于项目里涉及了大量的缓存处理和数据库运用,需要对数据库进行频繁的读写、查询等操作。因此首先想到了对整个项目的数据库框架进行优化。 原先使用android本身内置...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android ORM 框架之 greenDAO
举报原因:
原因补充:

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