greenDAO是一个开源项目,旨在帮助Android开发者方便使用SQLite进行数据存储。SQLite是非常棒的嵌入式关系型数据库,但是使用它需要增加许多额外的工作。编写SQL语句,解析查询结果是一件苦差事。greenDAO就是为了解决这个问题:它将java对象映射到相应的数据库表(通常称为ORM)。这样就可用面向对象的方式进行存储,删除和查询java对象,节约开发时间,且可更加关注实际的问题。
![](http://static.oschina.net/uploads/space/2014/0911/113109_i0bt_1052509.png)
greenDAO主要的设计目标
(1)最佳性能(或许是Android中最快的ORM)
(2)简易使用的接口
(3)针对Android高度优化
(4)极小的类库,注重本质
谁在使用greenDao
有不少热门Android应用引用greenDAO,其中不乏千万装机量的应用,这说明其行业可靠性。在AppBrain上可查看当前的统计数据,下面是其中的部分统计截图。
![](http://static.oschina.net/uploads/space/2014/0911/113511_VN3R_1052509.png)
特性
(1)对象/关系映射(ORM)
greenDAO的本质是提供面向对象的接口将数据存储到关系型数据库SQLite中。只需定义数据模型,greenDAO就将生成java数据对象(实体)和DAO(data access objects数据访问对象)。这将节省许多烦人的代码去来回移动数据。除此之外,greenDAO还提供许多高级的ORM特性,如会话缓存,预加载,主动实体(active entities)
(2)性能
greendDAO在性能上没有做任何折中。数据库便于储存大量的数据,因此速度是关键。使用greenDAO,大多数实体可以以每秒几千个实体的速度执行插入,更新和加载操作。我们对greenDAO的性能有绝对的信心,可以与其他ORM工具作比较。我们优先挑选了ORMLite,因为它在Android ORM工具中是比较受欢迎的。同样的实体,greenDAO插入和更新快2倍多,加载实体快4.5倍。在大多数应用应用中,加载速度是关键。
![](http://static.oschina.net/uploads/space/2014/0911/114518_Kho8_1052509.png)
(这是2011年10月23号的测试数据)
除了greenDAO核心本身的高性能,其特性如会话缓存和智能预加载技术提供了额外的性能提升。
(3)类库小
greenDAO的核心类库大小小于100k,索引引入greenDAO不会对APK包大小产生大的影响。
(4)主动实体
如果你希望,实体可以是“主动”的:主动实体显然地决解了“关系”(你只需调用get方法),并提供更新、删除和刷新方法,方便持久化操作。(注:这里的关系是指数据库表之间的1:1,1:n,m:n关系,主动实体将在下面的章节详细介绍)
(5)支持protobuf协议
greenDAO可以直接持久化protobuf对象到数据库。如果你通过protobuf与服务端通信,就不需要做其他映射,所有对普通实体的持久化操作同样适用protobuf对象。这应该是greenDAO独有的特性。
(6)代码生成
greenDAO会生成Java数据对象(实体)和DAO对象。每个实体有相应的DAO对象,以达到最佳映射。(注:代码生成是greenDAO与采用注解的方式的ORM在设计思想的最大区别)
(7)开源
greenDAO的源码在github上完全可见。源码中还包含了JUnit测试用例。这些用例包含了greenDAO的所有特性,这是一个非常好的方式学习greenDAO。
本文转自:http://my.oschina.net/u/1052509/blog/312338