GreenDao 3.2.0官网介绍的部分翻译(一)

简介

greendao的本质是为存储在关系型数据库sqlite中的数据提供一个对象导向型的接口,只需要定义好数据的model类,然后greendao就会创建一个java对象和数据访问对象。这将会少写很多无聊的把数据折腾来折腾去的代码。更屌的是,greendao还提供了一些灰常牛逼的orm特性,像查询会话缓存、预加载和活动实体。

 

在现存的所有的orm中,greendao是最快的,我们greendao表现最完美。速度才是数据库存取数据的王道,使用greendao,大多数的对象实体可以以一秒钟几千个的速度被插入和修改。

 

我们对greendao的表现很自信,不服你可以拿其他的orm和我们比对。我们开源了测试标准,完全透明。下面的图比较了现在最流行的(主要是根据github上的星数和Appbrain的数据)三种android的orm解决方案——OrmLite、ActiveAndroid以及我们的greendao。greendao在插入和修改实体的时候比ORMLite大约快两倍,在加载实体的时候大约比ORMLite快四倍。

 

除了这些,greendao在查询会话缓存和智能预加载的技术上有额外的加速表现哦。

 

在加密支持方面,你可以在安卓内置的标准的sqlite上使用greendao,也可以和

SQLCipher搭配使用。

 

“苗条的”库文件:greendao的核心库还不到100K,所有添加上去不会让你的APK变得臃肿。

 

活动实体:如果你高兴,你可以把实体做成“活动”的,活动的实体可以清晰地解析数据关系(你只需要调用getter函数就OK了),对于数据持久化,它还有修改、删除、刷新的方法,都很方便。

 

协议缓冲支持:如果你通过协议缓冲和你的服务器交互的话,你就不需要其他的映射了。对于协议缓冲对象来说,所有的常规实体类的持久化操作都是可用的。我们相信这个是我们牛逼的greendao的一个独特的特性。

 

代码生成:greendao将会生成java对象(实体)和数据访问对象的对象。DAO的对象针对实体,生成最合适的映射。未来的计划:到时候可以搞一些适配器,获取有可能是增删改查的activity。

 

开源:greendao的开源代码在github上完全可见,其中包括了使用率greendao的各种特性的JUnit单元测试,因此它也是学习greendao的一个好途径。

 

 

 

 

 

 

Demo

如何启动

 

这篇使用指导将会带你完成一个简单的greendao的样本工程——DaoExample,请任性地去下载代码并运行它,或者你也可以直接在github上看相关文件。

 

DaoExample 是一个简单的记事本APP,你可以添加记事,也可以通过点击已经存在的

 

笔记来删除它。

 

Note实体和DAO类:让我们直接去看代码吧,在src的文件夹里面你会看到一个记事本的

 

实体类,Note.java,它会持久化到数据库中,并且会包含一个笔记的所有数据,比

 

如一个ID,笔记正文和创建日期。

 

一般而言,一个实体就是一个类,这个类能持久化于数据库中(也就是表中的一条记

 

录)。一个实体包含若干个属性,这些属性和数据库里面的某一列呈映射关系。

 

现在开整项目,举个栗子,使用AS里面的“Build > Make project”,然后就会使

 

greendao生成DAO的类文件,比如像NoteDao.java这样的,这些将帮助你添加笔记记

 

录到数据库。

 

插入和删除笔记:为了学习如何添加一些笔记记录,先看看NoteActivity这个类。首

 

先,我们必须在onCreate函数里面为我们的Note类准备一个DAO对象。

// get the note DAO

DaoSession daoSession = ((App) getApplication()).getDaoSession();

noteDao = daoSession.getNoteDao();

 

 

当用户点击添加按钮的时候,addNote()函数就会被调用。我们在那儿创建一个新的

 

Note对象,然后把该对象传到DAOs的insert()方法里面去,从而使其插入数据库。

Note note = new Note(null, noteText, comment, new Date());

noteDao.insert(note);

Log.d("DaoExample", "Inserted new note, ID: " + note.getId());

 

 

注意:既然我们刚刚在实例化Note的时候,并没有把id传进构造方法。在这种情况下,数

 

据库决定note的id,DAO会在从插入操作返回前自动追加新的id。

删除一个note也是直接了当的,可以去看NoteClickListener的接口。

 

如果你能搞定上面这些,你页可以去探索一下其他的方法,比如loadAll()和

 

update()

 

构建配置数据库:你早已经见过了DAOs了,但是你如何初始化绿刀和底层的数据库呢

 

?通常你需要在Application类里面初始化DaoSession,这事干一次就够了。

DevOpenHelper helper = new DevOpenHelper(this, "notes-db");

Database db = helper.getWritableDb();

daoSession = new DaoMaster(db).newSession();

 

 

 

这个数据库的创建是借助了已经生成了的DaoMaster类提供的辅助类DevOpenHelper,

 

DevOpenHelper是DaoMaster中OpenHelper 的实现类,为你做了所有的数据库的构建

 

配置工作,因为有它,你就不必再去写“CREATE TABLE”这样的SQL语句了。

 

然后,activity和碎片就可以通过调用getDaoSession()来访问DAO实体,在插入和删

 

note的时候就像上图显示的那样。

 

扩展和添加实体:为了扩展我们的note或者创建新的实体,你只需要简单地修改或创

 

java类,然后以同样的方式注解就可以了。然后重新构建你的工程。

 

既然你对绿刀有了一个初步的印象了,那么现在去自己动手试一试吧。点击“文档”

 

去查看完整的API文档。

 

核心概念介绍

绿刀是Android开发中的对象关系映射工具,它为关系型数据库SQLite提供了一个对

 

象导向型的接口。像绿刀这样的ORM工具为你做了大量繁琐性的工作,并为你的数据

 

提供一个简单的接口。

 

为了在你的Android项目中使用绿刀,你需要添加绿刀的插件并添加绿刀的库:

buildscript {

    repositories {

        mavenCentral()

    }

    dependencies {

        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'

    }

}

 

apply plugin: 'com.android.application'

apply plugin: 'org.greenrobot.greendao'

 

dependencies {

    compile 'org.greenrobot:greendao:3.2.0'

}

 

核心类:一旦工程被创建,你就可以在你的安卓工程中使用绿刀。下面的几个核心类

 

是绿刀最重要的接口:

1)DaoMaster:使用绿刀的入口点类。DaoMaster 持有一个SQLiteDatabase的数据

 

库对象,并且为指定的表管理DAO类(不是DAO对象)。它拥有创建或删除表的静态方

 

法。它的内部类OpenHelper 和DevOpenHelper 是SQLiteOpenHelper 的实现类,它们

 

可以在SQLite 数据库中创建表。

2)DaoSession:为指定的表管理所有的DAO对象,你可以通过getter函数来获得。

DaoSession 也提供了一些常用的持久化技术,比如对实体的插入、加载、修改、刷

 

新和删除。最后,一个DaoSession的对象也可以追踪一个ID的范围,详情请见

 

session documentation.

3)DAOs:数据访问对象为实体提供持久化和查询。对于每一个实体,绿刀都会生

 

成一个DAO。相比于DaoSession,它有更多的持久化函数,比如count啦,loadAll啦

 

,还有insertInTx。

4)实体:可持久化的对象。通常情况下,实体是展示数据库单行数据的对象,使

 

用的是标准的Java属性,比如POJO或Bean文件。

 

核心的初始化:最后,下面的代码样例会展示初始化数据库和绿刀核心类的一些前置

 

步骤:

// do this once, for example in your Application class

helper = new DaoMaster.DevOpenHelper(
this, "notes-db", null);

db = helper.getWritableDatabase();

daoMaster = new DaoMaster(db);

daoSession = daoMaster.newSession();

// do this in your activities/fragments to get hold of a DAO

noteDao = daoSession.getNoteDao();

 

这个例子是假设了一个Note实体已存在。有DAO(noteDao对象)的存在,我们可以为这

个指定的实体进行持久化操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值