我相信,大家在开发Android的过程中或多或少都会接触到SQLite,然而我们再使用的时候需要做很多额外工作,编写SQL语句,查询结果更新等等。这事适用于Android的ORM框架就孕育而生了,现在主流的框架有 OrmLite、SugarORM、Active Android、Realm 与 GreenDAO。我们今天就给大家介绍一下GreenDAO!

关于 greenDAO

Paste_Image.png

greenDAO 是一个将对象映射到 SQLite 数据库中的轻量且快速的 ORM 解决方案。
关于greenDAO的概念可以看官网 greenDAO

greenDAO 设计的主要目标

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

greenDAO 的主要优势

性能上优于同类的orm,这个官网有性能的比较 有兴趣的可以去官网看一下 我就不贴图了
greenDAO 支持protocol buffer(protobuf)协议数据的直接存储,如果你通过 protobuf 协议与服务器交互,将不需要任何的映射。
与 ORMLite 等使用注解方式的 ORM 框架不同,greenDAO 使用「Code generation」的方式,这也是其性能能大幅提升的原因。

让我们开始吧

一. 在 Android 工程中配置「greenDao Generator」模块

1.在 .src/main 目录下新建一个与 java 同层级的「java-gen」目录,用于存放由 greenDAO 生成的 Bean、DAO、DaoMaster、DaoSession 等类。

Paste_Image.png Paste_Image.png

2.配置 Android 工程(app)的 build.gradle,如图分别添加sourceSets与dependencies。

Paste_Image.png

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

compile 'de.greenrobot:greendao:1.3.7'

二. 新建「greenDAO Generator」模块 (纯 Java 工程)

1.通过 File -> New -> New Module -> Java Library -> 填写相应的包名与类名 -> Finish.

Paste_Image.png

2.配置 新建的工程的中build.gradle,添加 dependencies.

Paste_Image.png

compile 'de.greenrobot:greendao-generator:1.3.1'

1.编写ExampleDaoGenerator类,注意: 我们的 Java 工程只有一个类,它的内容决定了「GreenDao Generator」的输出,你可以在这个类中通过对象、关系等创建数据库结构,下面我将以注释的形式详细讲解代码内容。

public class DaoExampleGenerator {    public static void main(String[] args) throws Exception {        // 正如你所见的,你创建了一个用于添加实体(Entity)的模式(Schema)对象。       // 两个参数分别代表:数据库版本号与自动生成代码的包路径。        Schema schema = new Schema(1, "com.example.junweiup.greendaodem");//      当然,如果你愿意,你也可以分别指定生成的 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)了。        addNote(schema);        // 最后我们将使用 DAOGenerator 类的 generateAll() 方法自动生成代码,此处你需要根据自己的情况更改输出目录(既之前创建的 java-gen)。        // 其实,输出目录的路径可以在 build.gradle 中设置,有兴趣的朋友可以自行搜索,这里就不再详解。        new DaoGenerator().generateAll(schema, "../GreenDAodemo/app/src/main/java-gen");    }    /**     * @param schema     */    private static void addNote(Schema schema) {        // 一个实体(类)就关联到数据库中的一张表,此处表名为「Note」(既类名)        Entity note = schema.addEntity("Note");        // 你也可以重新给表命名        // note.setTableName("NODE");        // greenDAO 会自动根据实体类的属性值来创建表字段,并赋予默认值        // 接下来你便可以设置表中的字段:        note.addIdProperty();        note.addStringProperty("text").notNull();        // 与在 Java 中使用驼峰命名法不同,默认数据库中的命名是使用大写和下划线来分割单词的。        // For example, a property called “creationDate” will become a database column “CREATION_DATE”.        note.addStringProperty("comment");        note.addDateProperty("date");    }}

三. 生成 DAO 文件(数据库)

执行 generator 工程,如一切正常,你将会在控制台看到如下日志,并且在主工程「java-gen」下会发现生成了DaoMaster、DaoSession、NoteDao、Note共4个类文件。


Paste_Image.png

如果在此处出错,你可以依据错误日志进行排查,主要看是否输出目录存在?其他配置是否正确?等

Paste_Image.png

四. 在 Android 工程中进行数据库操作

我们要在Application中初始化

Paste_Image.png

这里,我们只创建一个 NodeActivity 类,用于测试与讲解 greenDAO 的增、删、查功能。

private void addNote() {    \String noteText = editText.getText().toString();    editText.setText("");    final DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);    String comment = "Added on " + df.format(new Date());    if (noteText == null || noteText.equals("")) {        ToastUtils.show(getApplicationContext(), "Please enter a note to add");    } else {        // 插入操作,简单到只要你创建一个 Java 对象        Note note = new Note(null, noteText, comment, new Date());        getNoteDao().insert(note);        Log.d(TAG, "Inserted new note, ID: " + note.getId());        cursor.requery();    }}private void search() {    String noteText = editText.getText().toString();    editText.setText("");    if (noteText == null || noteText.equals("")) {        ToastUtils.show(getApplicationContext(), "Please enter a note to query");    } else {        // Query 类代表了一个可以被重复执行的查询        Query query = getNoteDao().queryBuilder()                .where(NoteDao.Properties.Text.eq(noteText))                .orderAsc(NoteDao.Properties.Date)                .build();        // 查询结果以 List 返回        List notes = query.list();        ToastUtils.show(getApplicationContext(), "There have " + notes.size() + " records");    }    // 在 QueryBuilder 类中内置两个 Flag 用于方便输出执行的 SQL 语句与传递参数的值    QueryBuilder.LOG_SQL = true;    QueryBuilder.LOG_VALUES = true;    Query query = getNoteDao().queryBuilder()            .where(NoteDao.Properties.Text.eq(noteText))            .build();    List list = query.list();    Toast.makeText(NoteActivity.this, "text"+list.size(), Toast.LENGTH_SHORT).show();}

最后

本文 Demo 下载链接:https://github.com/JunWeiUp/GreenDao/,,如果喜欢的话可以star一下。╭(╯ε╰)╮
本教程旨在介绍 greenDAO 的基本用法与配置,更高级与详细的使用,请参见官网
如本文有任何问题欢迎指正。

参考自

更多相关文章

  1. unity3d引用android第三方sdk
  2. 创建一个简单的android工程的步骤
  3. Android(安卓)Handler和内部类的正确用法
  4. Android(安卓)导入第三方工程 Library 注意事项
  5. android launcher的结构
  6. Android系列之Intent传递对象的几种实例方法
  7. [转]五大布局对象---FrameLayout,LinearLayout ,AbsoluteLayout,
  8. 更新ADT20后出现This template depends on Android(安卓)Support
  9. [置顶] android 耳机按钮深层理解

随机推荐

  1. 【诚聘】Android图书兼职作者
  2. Android(安卓)打造自己的个性化应用(一):
  3. android调试之adb
  4. android 连接远程数据库
  5. Unity的春天
  6. Android多媒体学习一:Android中Image的简
  7. 收紧 Android(安卓)控制权,Google 或强制
  8. Android新手入门 FAQ
  9. Android视频采集
  10. 手把手的教你成为Android高手(视频+源码+