为何使用GreenDAO?
存储本地数据往往想到SQLite数据库,但SQLite需要做许多额外的工作,如编写SQL语句与解析查询结果等。所以,适用于 Android 的ORM 框架也就孕育而生了,现在市面上主流的框架有 OrmLite、SugarORM、Active Android、Realm 与 GreenDAO。
GreenDAO 是一个将对象映射到 SQLite 数据库中的轻量且快速的 ORM (Object Relation Mapping - 对象关系映射)解决方案。能够提供一个接口通过操作对象的方式去操作关系型数据库,它能够让你操作数据库时更简单、更方便。
当性能很重要时(数据访问频繁),GreenDao是一个很快的解决方案,它能够支持数千条记录的CRUD每秒,和OrmLite相比,GreenDAO要快几乎4.5倍。(准确数据请自行benchmark)。
内存开销最小化,GreenDAO小于100KB,所以对于应用程序APK的大小影响很小。
GreenDAO主要特点:
greenDAO性能远远高于同类的ORMLite,支持protocol buffer(protobuf)协议数据的直接存储,如果通过protocol协议与服务器交互,将不需要任何映射,与ORMLite等使用注解方式的ORM不同,greenDAO使用 Code generation的方式,这是其性能大幅提升的原因。为了在我们的 Android 工程中使用 greenDAO ,我们需要另建一个纯 Java Project,用于自动生成后继 Android 工程中需要使用到的 Bean、DAO、DaoMaster、DaoSession 等类。
Protocol Buffers协议:以一种高效可扩展的对结构化数据进行编码的方式。google内部的RPC协议和文件格式大部分都是使用它。
RPC:远程过程调用(Remote Procedure Call,RPC)是一个计算机通信协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
在使用greenDAO的时候需要创建两个project,其中一个是java工程,它用来生成特定于您的项目的代码域(即生成了bean对象和操作数据库的dao)。
核心的classes
DaoMaster:
DaoMaster保存了数据库对象和管理DAO类的classes,其提供了一些静态方法创建和删除表,内部类OpenHelper和DevOpenHelper 实现了SQLiteOpenHelper并创建数据库的框架。
DaoSession:
管理所有可用的DAO对象,可以通过getter方法获得。DaoSession还提供了一些通用的持久性方法比如插入、加载、更新,刷新和删除实体。
DAOs:
数据访问对象,每一个实体类都有对应的greenDAO对象。
Entities:
实体类对象
GreenDAO与ORMLite对比
ORMLite
基于注解和反射的的方式,导致ormlite性能有着一定的损失(注解其实也是利用了反射的原理)
优点:
文档较全面,社区活跃,有好的维护,使用简单,易上手。
缺点:
基于反射,效率较低
GreenDao
官网中明确指明了其首要设计目标:
Maximum performance (probably the fastest ORM for Android):系能最大化
Easy to use APIs:便于使用
Highly optimized for Android:对于Android高度优化
Minimal memory consumption:最小化内存开销
Small library size, focus on the essentials:较小的文件体积,只集中在必要的部分上。
优点:
效率很高,插入和更新的速度是sqlite的2倍,加载实体的速度是ormlite的4.5倍。官网测试结果:http:/
/greendao-orm.com/features/
文件较小(<100K),占用更少的内存 ,但是需要create Dao,
操作实体灵活:支持get,update,delete等操作
缺点:
学习成本较高。其中使用了一个java工程根据一些属性和规则去generate一些基础代码,类似于javaBean但会有一些规则,另外还有QueryBuilder、Dao等API,所以首先要明白整个过程,才能方便使用。没有ORMLite那样封装的完整,不过greenDao的官网上也提到了这一点,正是基于generator而不是反射,才使得其效率高的多。
本文对比了GreenDAO与ORMLite这两种Android ORM框架。GreenDAO提供了高性能的数据访问速度,支持ProtocolBuffer协议数据存储,并采用代码生成的方式减少运行时的反射开销。相比之下,ORMLite基于注解和反射,虽然易于使用但效率较低。
2938

被折叠的 条评论
为什么被折叠?



