实现Android数据持久化的3种方法与优劣比较
近日,从事MobIM开发工作。在工作中需要实现本地数据持久化缓存的操作。查看了下当下流行的几款比较受欢迎的开源框架。选取了比较有代表性的(GreenDAO 与Litepal)进行实现和与原生的Sqlite框架进行实现和比较。
一、GreenDAO的介绍与实现
1、GreenDAO的优点
性能高,号称Android最快的关系型数据库
内存占用小
库文件比较小,小于100K,编译时间低,而且可以避免65K方法限制
支持数据库加密 greendao支持SQLCipher进行数据库加密
简洁易用的API
2、最新的GreenDAO的版本为3.2.2。集成方式十分便捷和简单。Javabean就是数据库对象,对JavaBean的操作,直接映射到数据库 上。避免手写建表SQL的繁琐,和手写数据库操作的代码。并且支持各类函数级别的增、删、改、查。
3、GreenDAO的集成步骤
1)在Project的build.gradle里添加greendao-gradle-plugin。
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'
2)在App的build.gradle里声明引用GreenDAO的 plugin 。
apply plugin: 'org.greenrobot.greendao'
3)引用GreenDAO的工程jar包。 compile 'org.greenrobot:greendao:3.2.0'
4)执行Sync Project with Gradle Files 。根据以上配置,下载和引用GreenDAO的类库。
5)创建数据库映射的实体类。其中,@Entity 、@Id、@Property 等都是GreenDAO特有的元注解,可以通过标注JavaBean来告诉GreenDAO这是个数据库表,以及表对应的字段名。使用注解的方式来定义实 体类,通过gradle插件生成相应的代码,十分方便 。
@Entity public class User { public static final int MAN = 1 ; public static final int WOMAN = 0 ; @Id(autoincrement = true) private Long id; //@Unique private String name; @Property(nameInDb = "db_age") private String age; private String date; private String regdate;
.............
6)标注完成后,再执行下 4)步骤,会自动生成 get、set 方法和构造函数。
7)针对User类的数据库操作类也已经自动生成了。它就是 UserDao 。获取UserDAO需要用到DaoSession 和DaoMaster。通过以下步骤获取UserDAO。以此类推通过定义 Xyz类的JavaBean就可以自动生成 XyzDao。
了解DaoMaster和DaoSession与XyzDao的关系
DaoMaster: 使用greenDAO的切入点。DaoMaster保存数据库对象(SQLiteDatabase)并管理特定模式的DAO类(而不是对象)。 它具有静态方法来创建表或将它们删除。 其内部类OpenHelper和DevOpenHelper是在SQLite数据库中创建模式的SQLiteOpenHelper实现。一个 DaoMaster就代表着一个数据库的连接。
DaoSession: 管理特定模式的所有可用DAO对象,您可以使用其中一个getter方法获取。 DaoSession还为实体提供了一些通用的持久性方法,如插入,加载,更新,刷新和删除。 DaoSession可以让我们使用一些Entity的基本操作和获取Dao操作类,DaoSession可以创建多个,每一个都是属于同一个数据库连接的。
XyzDAO:数据访问对象(DAO)持续存在并查询实体。 对于每个实体,GreenDAO生成一个DAO。 它比DaoSession有更多的持久化方法,例如:count,loadAll和insertInTx。
8) GreenDAO的数据库一般操作。
二、LitePal的介绍与实现
1、LitePal的介绍
LitePal非常小,集成起来非常方便,通过建立JavaBean继承DataSupport的方式,直接使其JavaBean具有了,数据库操作的相关方法。
2、LitePal的实现
1)在App的build.gradle里导入LitePal的类库。 compile 'org.litepal.android:core:1.6.0'
2)在资源文件夹assets下建立litepal.xml文件。
3)建立JavaBean类,并继承DataSupport。
4)声明LitePalApplication。 android:name="org.litepal.LitePalApplication"
5)LitePal的数据库一般操作。
三、Android SQLite原生数据库介绍与实现
1、Android SQLite原生数据库介绍
Android才用了小型的关系数据SQLite,占用资源很少。支持各种数据库操作。
2、Android SQLite原生数据库的实现
大家对Android 原生数据库的实现应该比较熟悉,这里不再详细赘述,主要指出主要步骤。
四、3种数据库实现方式在具体实践中的比较
在魅族metal手机上的测试结果:执行效率 SQLite原生 > GreenDAO > Litepal
五、分析原因与使用方式推荐
SQLite原生集成虽然费时,但是其中没有封装各类复合查询和各类判断,效率最高。
GreenDAO开始配置的时候步骤比较繁琐,使用了注解类动态生成操作类,接口函数封装很完善,功能强大,如果不涉及到大规模的数据库操作推荐使用。
Litepal配置简单,集成速度很快,但是要配置LitepalApplication,有一定侵入式,在一些小型快速的项目上可以推荐使用。
文/Mob开发者平台 Android开发专家 徐化杰