实现Android数据持久化的3种方法与优劣比较

jayronlou 2017-12-21

近日,从事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'

实现Android数据持久化的3种方法与优劣比较

2)在App的build.gradle里声明引用GreenDAO的 plugin 。

apply plugin: 'org.greenrobot.greendao'

实现Android数据持久化的3种方法与优劣比较

3)引用GreenDAO的工程jar包。 compile 'org.greenrobot:greendao:3.2.0'

实现Android数据持久化的3种方法与优劣比较

4)执行Sync Project with Gradle Files 。根据以上配置,下载和引用GreenDAO的类库。

实现Android数据持久化的3种方法与优劣比较

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 方法和构造函数。

实现Android数据持久化的3种方法与优劣比较

7)针对User类的数据库操作类也已经自动生成了。它就是 UserDao 。获取UserDAO需要用到DaoSession 和DaoMaster。通过以下步骤获取UserDAO。以此类推通过定义 Xyz类的JavaBean就可以自动生成 XyzDao。

实现Android数据持久化的3种方法与优劣比较

了解DaoMaster和DaoSession与XyzDao的关系

实现Android数据持久化的3种方法与优劣比较

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的数据库一般操作。

实现Android数据持久化的3种方法与优劣比较

实现Android数据持久化的3种方法与优劣比较

二、LitePal的介绍与实现

1、LitePal的介绍

LitePal非常小,集成起来非常方便,通过建立JavaBean继承DataSupport的方式,直接使其JavaBean具有了,数据库操作的相关方法。

2、LitePal的实现

1)在App的build.gradle里导入LitePal的类库。 compile 'org.litepal.android:core:1.6.0'

实现Android数据持久化的3种方法与优劣比较

2)在资源文件夹assets下建立litepal.xml文件。

实现Android数据持久化的3种方法与优劣比较

实现Android数据持久化的3种方法与优劣比较

3)建立JavaBean类,并继承DataSupport。

实现Android数据持久化的3种方法与优劣比较

4)声明LitePalApplication。 android:name="org.litepal.LitePalApplication"

实现Android数据持久化的3种方法与优劣比较

5)LitePal的数据库一般操作。

实现Android数据持久化的3种方法与优劣比较

实现Android数据持久化的3种方法与优劣比较

三、Android SQLite原生数据库介绍与实现

1、Android SQLite原生数据库介绍

Android才用了小型的关系数据SQLite,占用资源很少。支持各种数据库操作。

2、Android SQLite原生数据库的实现

大家对Android 原生数据库的实现应该比较熟悉,这里不再详细赘述,主要指出主要步骤。

实现Android数据持久化的3种方法与优劣比较

实现Android数据持久化的3种方法与优劣比较

实现Android数据持久化的3种方法与优劣比较

实现Android数据持久化的3种方法与优劣比较

四、3种数据库实现方式在具体实践中的比较

在魅族metal手机上的测试结果:执行效率 SQLite原生 > GreenDAO > Litepal

实现Android数据持久化的3种方法与优劣比较

五、分析原因与使用方式推荐

SQLite原生集成虽然费时,但是其中没有封装各类复合查询和各类判断,效率最高。

GreenDAO开始配置的时候步骤比较繁琐,使用了注解类动态生成操作类,接口函数封装很完善,功能强大,如果不涉及到大规模的数据库操作推荐使用。

Litepal配置简单,集成速度很快,但是要配置LitepalApplication,有一定侵入式,在一些小型快速的项目上可以推荐使用。

文/Mob开发者平台 Android开发专家 徐化杰

相关推荐