GreenDao学习笔记(一)

greenDAO功能

对象/关系映射(ORM)

greenDAO的本质是为存储在关系数据库SQLite中的数据提供面向对象的接口。只需定义数据模型,greenDAO将创建Java数据对象(实体)和DAO(数据访问对象)。这将为您节省很多无聊的代码,只是来回移动数据。除此之外,greenDAO还提供一些高级ORM功能,如会话缓存,预先加载和活动实体。


性能

在我们所知的所有ORM中,greenDAO是最快的。greenDAO不会对性能做任何妥协。数据库经常用来存储大量数据,因此速度很重要。使用greenDAO,大多数实体可以以每秒几千个实体的速率插入,更新和加载

下面是GreenDao 做的和OrmLite已经ActiveAndroid的速度对比,由图可知GreenDao的熟读确实很快,尤其是读取熟读


加密支持

您可以将greenDAO与嵌入Android的标准SQLite一起使用,也可以将其与SQLCipher一起使用。

虽然Android的新版本支持文件系统加密,但Android本身不提供数据库文件的加密功能。因此,如果攻击者获得对数据库文件的访问权(通过获取root访问权,例如利用安全漏洞或欺骗root设备的用户),攻击者可以访问该数据库内的所有数据。使用受密码保护的加密数据库会增加一层额外的安全性。它可以防止攻击者简单地打开数据库文件。

由于Android不支持现成的加密数据库,因此需要在APK中捆绑自定义版本的SQLite。这些自定义构建由CPU相关的本地代码组成。所以APK的大小会增加几MB。因此,如果你真的需要它,你应该只使用加密。

虽然Android的新版本支持文件系统加密,但Android本身不提供数据库文件的加密功能。因此,如果攻击者获得对数据库文件的访问权(通过获取root访问权,例如利用安全漏洞或欺骗root设备的用户),攻击者可以访问该数据库内的所有数据。使用受密码保护的加密数据库会增加一层额外的安全性。它可以防止攻击者简单地打开数据库文件


使用自定义SQLite构建

由于Android不支持开箱即用的加密数据库,因此您需要在APK中捆绑自定义版本的SQLite。这些自定义构建由CPU相关的本地代码组成。所以你的APK的大小会增加几MB。因此,如果你真的需要它,你应该只使用加密。

设置数据库加密

greenDAO 直接支持带有绑定的SQLCipherSQLCipher是使用256位AES加密的SQLite定制版本。

添加SQLCipher依赖关系

有关如何将SQLCipher添加到项目信息,请参阅AndroidSQLCipher页面。

数据库初始化

确保使用DaoMaster中提供 OpenHelper的子类 来创建数据库实例。例如DaoMaster中也提供 了简单的DevOpenHelper

然后,在创建数据库实例时,只需调用 getEncryptedWritableDb password 而不是 getWritableDb最后,像往常一样将数据库传递给 DaoMaster

数据库抽象

greenDAO为所有数据库交互使用一个精简抽象层,因此支持标准和非标准SQLite实现:

  • Android标准的android.database.sqlite.SQLiteDatabase
  • SQLCipher的 net.sqlcipher.database.SQLiteDatabase
  • 任何SQLite兼容的数据库,它可以实现 org.greenrobot.greendao.database.Database (例如SQLite的自定义构建)

这使您可以轻松地从标准数据库切换到加密的数据库,因为您的代码在定位DaoSession和单个DAO 时是相同的 

用Robolectric进行单元测试

数据库抽象允许Robolectric进行单元测试。即使您的应用使用加密数据库,您的测试也可以使用未加密的数据库

Robolectric实现标准的SQLite API,无法加载自定义SQLite构建(Android二进制文件)。所以对于你的测试,在创建数据库实例时使用 .getWritableDb() 而不是.getEncryptedWritableDb(<password>)

已知的SQLCipher问题

SQLCipher是SQLite的自定义版本。其Android API与Android系统API差别不大。以下是我们注意到的问题(与greenDAO无关):

  • 抛出的异常不属于 android.database.SQLException 
  • QLCipher锁定远远超过最近的 SQLiteDatabase实现。这不仅会降低并发性,还会增加死锁的可能性。
  • SQLCipher 3.5.0开始缺少Android排序规则(如LOCALIZED)


苗条图书馆

greenDAO的核心库的大小不到100k,因此添加greenDAO并不会损害您的APK大小。

活动实体

如果你愿意,实体可以变为“活动”:活动实体透明地解析关系(你只需调用一个getter),并且拥有更新,删除和刷新方法,以方便访问持久性功能。

协议缓冲区支持

greenDAO可让您将协议缓冲区(protobuf)对象直接保存到数据库中。如果您通过protobuf与您的服务器通话,则不需要其他映射。常规实体的所有持久性操作都可用于protobuf对象。我们相信这是greenDAO的独特功能。

代码生成

greenDAO将生成Java数据对象(实体)和DAO对象。DAO对象是针对允许最佳映射的实体定制的。
未来计划:生成适配器,也许还有CRUD活动。

开源

greenDAO的源代码在G itHub上完全可用源代码发行版还包含一个JUnit测试套件,它使用了greenDAO的所有功能,因此是学习greenDAO的好方法。

支持

greenDAO是开源的,并支持其开发者和其社区。


猜你喜欢

转载自blog.csdn.net/xxx_19942/article/details/80677889
今日推荐