前言
本文介绍了什么是ORM,ORMLite和GreenDao框架优劣分析,GreenDao实战分享,并给出源码demo。
1
什么是ORM
ORM其全称叫做对象关系映射(Object Relation Mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。它实际是创建了一个可在编程语言里使用的“虚拟对象数据库”。
众所周知,我们在Android开发中使用的java是一种面向对象的编程语言。面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的。这两者之间从基本原理上是不一致的,此刻,ORM作为项目中间件形式实现数据在不同场景下数据关系映射。对象关系映射是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术,ORM就是这样而来的。
目前比较成熟的ORM框架有:ORMLite、GreenDao、ormdroid、androrm、ActiveAndroid。本文主要介绍当下比较流行的两个框架:ORMLite和GreenDao。根据本人的实战经验,推荐大家使用GreenDao。
2
ORMLite与GreenDao优劣分析
1
ORMLite
ORMLite基于注解和反射的的方式,导致ORMLite性能有着一定的损失(注解其实也是利用了反射的原理)。
优点: 文档较全面,社区活跃,有好的维护,使用简单,易上手
缺点: 基于反射,效率较低
2
GreenDao
GreenDAO是一个可以帮助Android开发者快速将Java对象映射到SQLite数据库的表单中的ORM解决方案,通过使用一个简单的面向对象API,开发者可以对Java对象进行存储、更新、删除和查询。有如下三个特点:
1. 数据库直接操作对象
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 :
代码语言:javascript复制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
代码语言:javascript复制源码见GitHub comopencommondatabaseDBTable.java
DBField.java
代码语言:javascript复制源码见 GitHub comopencommondatabaseDBField.java
DBCodeGenerate.java
代码语言:javascript复制源码见GitHub comopencommondatabaseDBCodeGenerate.java
3
生成代码
用以上三个类生成代码,范例如下: (注意:一定要在main方法中执行生成。)
CodeGenerate.java
代码语言:javascript复制源码见GitHub DataBaseDemo comopencommonsdkdbdemoCodeGenerate.java
run上面这个main方法即可在E:/GreenDao/src生成得到如下几个类:
4
封装DBHelper
自己再写一个供自己使用的封装的类 DBHelper.java
代码语言:javascript复制源码见GitHub comopencommonsdkdbdemoDBHelper.java
5
使用示例
增:
代码语言:javascript复制UserInfoDao userInfoDao = DBHelper.getInstance(this).getUserInfoDao();
userInfoDao.insert(userObj);
删:
代码语言:javascript复制UserInfoDao userInfoDao = DBHelper.getInstance(this).getUserInfoDao();
userInfoDao.delete(userObj);
改:
代码语言:javascript复制UserInfoDao userInfoDao = DBHelper.getInstance(this).getUserInfoDao();
userInfoDao.update(userObj);
查:
代码语言:javascript复制UserInfoDao userInfoDao = DBHelper.getInstance(this).getUserInfoDao();
UserInfo user=userInfoDao.queryBuilder().unique();
UserInfoDao里面的方法肯定不止这四个,还有很多方便操作数据库的api,心动不如行动,赶快尝试一下吧~~
参考资料
GreenDao官网
结语
GreenDao是一个非常不错的ORM框架,使用方便,效率高。本人对其使用进行了初步的封装,不足之处还望指正。篇幅原因,阅读demo源码请点击:https://github.com/OpenDevTeam/OpenBox/blob/master/article/database/GreenDao——你一定值得拥有的轻量数据库框架.md。
小贴士
本文版权归Open软件开发小组所有,如需转载请联系主编申请授权。