GreenDao:你必定值得拥有的轻量数据库框架

前言
        本文介绍了什么是ORM, ORMLite和GreenDao框架优劣分析,GreenDao实战分享,并给出源码demo。


1
     什么是ORM

      ORM其全称叫作对象关系映射(Object Relation Mapping),是一种程序设计技术,用于实现面向对象编程语言里不一样类型系统的数据之间的转换。它实际是建立了一个可在编程语言里使用的“虚拟对象数据库”。java

      众所周知,咱们在Android开发中使用的java是一种面向对象的编程语言。面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的。这二者之间从基本原理上是不一致的,此刻,ORM做为项目中间件形式实现数据在不一样场景下数据关系映射。对象关系映射是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术,ORM就是这样而来的。sql

            目前比较成熟的ORM框架有:ORMLite、GreenDao、ormdroid、androrm、ActiveAndroid。本文主要介绍当下比较流行的两个框架:ORMLite和GreenDao。根据本人的实战经验,推荐你们使用GreenDao数据库


2
     ORMLite与GreenDao优劣分析
1
ORMLite  

     ORMLite基于注解和反射的的方式,致使ORMLite性能有着必定的损失(注解其实也是利用了反射的原理)。
编程

优势: 文档较全面,社区活跃,有好的维护,使用简单,易上手api

缺点: 基于反射,效率较低服务器


2
GreenDao

        GreenDAO是一个能够帮助Android开发者快速将Java对象映射到SQLite数据库的表单中的ORM解决方案,经过使用一个简单的面向对象API,开发者能够对Java对象进行存储、更新、删除和查询。有以下三个特色:微信

1.  数据库直接操做对象app

2.  自动生成代码框架

3.  当操做数据库频繁的时候,其优点更加明显编程语言

官网中明确指明了其首要设计目标:

  • 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倍。官网测试结果:文件较小(<100K),占用更少的内存 ,可是须要create Dao, 操做实体灵活:支持get,update,delete等操做。

缺点: 

        学习成本较高。其中使用了一个java工程根据一些属性和规则去generate一些基础代码,相似于javaBean但会有一些规则,另外还有QueryBuilder、Dao等API,因此首先要明白整个过程,才能方便使用。没有ORMLite那样封装的完整,不过GreenDao的官网上也提到了这一点,正是基于generator而不是反射,才使得其效率高的多。

        另外GreenDao支持Protocol buffers协议数据的直接存储 ,若是经过protobuf协议和服务器交互,不须要任何的映射。 Protocol Buffers协议:以一种高效可扩展的对结构化数据进行编码的方式。google内部的RPC协议和文件格式大部分都是使用它。


3
OrmLite 和 GreenDAO性能评测


由上图分析以下:

1.  吞吐量:

        GreenDao不管在数据插入、更新、读取方面的吞吐量都远在ORMLite以及ActiveAndroid二者之上。


2.   效率:

        对数据进行insert和update时GreenDao的效率是ORMLite两倍,执行read操做时GreenDao的效率达到了ORMLite四倍之多


2
     GreenDao使用
1
引入GreenDao框架

Android studio :

compile 'org.greenrobot:greendao:2.2.1'
compile 'org.greenrobot:greendao-generator:2.2.0'


2
提取出的代码生成器(三个通用类)

        这三个通用类用于生成表、字段以及对应的对象,咱们能够理解为一个对象对应一个table,每一个对象里面的属性对应每一个table里面的字段。

    • DBTable.java

    • DBField.java

    • DBCodeGenerate.java

DBTable.java

源码见GitHub com\open\common\database\DBTable.java

DBField.java

源码见  GitHub com\open\common\database\DBField.java

DBCodeGenerate.java

源码见GitHub com\open\common\database\DBCodeGenerate.java


3
生成代码

         用以上三个类生成代码,范例以下: (注意:必定要在main方法中执行生成。)

CodeGenerate.java

源码见GitHub DataBaseDemo com\open\common\sdk\dbdemo\CodeGenerate.java

run上面这个main方法便可在E:/GreenDao/src生成获得以下几个类:

4
封装DBHelper

        本身再写一个供本身使用的封装的类 DBHelper.java

源码见GitHub com\open\common\sdk\dbdemo\DBHelper.java


5
使用示例

增:

UserInfoDao userInfoDao = DBHelper.getInstance(this).getUserInfoDao();
        userInfoDao.insert(userObj);        

删:

UserInfoDao userInfoDao = DBHelper.getInstance(this).getUserInfoDao();
userInfoDao.delete(userObj);

改:

UserInfoDao userInfoDao = DBHelper.getInstance(this).getUserInfoDao();
userInfoDao.update(userObj);

查:

UserInfoDao userInfoDao = DBHelper.getInstance(this).getUserInfoDao();
UserInfo user=userInfoDao.queryBuilder().unique();

        UserInfoDao里面的方法确定不止这四个,还有不少方便操做数据库的api,心动不如行动,赶快尝试一下吧~~

参考资料

GreenDao官网

结语
GreenDao是一个很是不错的ORM框架,使用方便,效率高。本人对其使用进行了初步的封装,不足之处还望指正。篇幅缘由,阅读demo源码请点击文末的 阅读原文


小贴士
     

        本文版权归Open软件开发小组全部,如需转载请联系主编申请受权。

       申请加群交流学习请加主编微信:Jf-1994(井方哥),并备注:姓名-地区-公司-职业-加群。


Open软件开发小组



专一Android开发,欢迎关注!




点击“阅读原文”

本文分享自微信公众号 - Open软件开发小组(open_dev)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索