https://www.jianshu.com/p/4c15d8061bc6
官方Code,值得一看
- 特点 (对我们的来说就是框架的功能,平时阅读源码注意如何实现)
(1) Rock solid: greenDAO has been around since 2011 and is used by countless famous apps
非常稳定,自从 2011 年开始就被无数有名气的 App 使用
(2) Super simple: concise and straight-forward API, in V3 with annotations
超级简单(倒是觉得没有 LiteOrm简单),有简单的使用 API,在 v3 版本中引入注解
(3) Small: The library is <150K and it's just plain Java jar (no CPU dependent native parts)
很小,库是于 150 K 的 jar 包(不含有依赖 CPU 的本地代码部分,指的是 so库)
(4) Fast: Probably the fastest ORM for Android, driven by intelligent code generation
速度快,可能是 android 上最快的 ORM,可以自动生成代码
(5) Safe and expressive query API: QueryBuilder uses property constants to avoid typos
安全和容易记忆的查询 API:QueryBuilder 使用合适的常量来避免拼写错误
(6) Powerful joins: query across entities and even chain joins for complex relations
有强大的联合查询:支持实体间的交叉查询,以及支持复杂的链式查询
(7) Flexible property types: use custom classes or enums to represent data in your entity
拥有更灵活的类型,可以使用类类型或者枚举,来表示你的实体类
(8) Encryption: supports SQLCipher encrypted databases
可以加密:支持 SQLCipher 加密数据库
DaoMaster /DaoSession /xxDAO关系
理解了 DaoMaster、DaoSession、xxDAO 这个几个类, greenDAO 也就基本理解了
- DaoMaster:使用greenDAO的切入点。 DaoMaster保存数据库对象(SQLiteDatabase)并管理特定模式的DAO类(而不是对象)。 它有静态方法来创建表或删除它们。 它的内部类
OpenHelper和DevOpenHelper都是SQLiteOpenHelper的实现,用来在SQLite数据库中创建模式。 - DaoSession:管理特定模式的所有可用DAO对象,你可以使用其中一个的getter方法获取DAO对象。 DaoSession还为实体提供了一些通用的持久性方法,如插入,加载,更新,刷新和删除。 最后,DaoSession对象也跟踪identity scope。
- xxDAO:数据访问对象(DAO),用于实体的持久化和查询。 对于每个实体,greenDAO会生成一个DAO。 它比DaoSession拥有更多的持久化方法,例如:count,loadAll和insertInTx。
记忆点Master,我记得功夫熊猫里阿宝称师傅为Master,也就是大师的意思。可见DaoMaster的地位; 同理Session就是一场会话,为Daoj进行CURD操作。
这里给出一个比喻,DaoMaster 相当于一个 Boss,统领大局,但是具体的工作会交给 DaoSession, DaoSession 相当于一个 Leader,会负责管理一些 xxDAO,当然也可以有多个 DaoSession,DaoSession 会提供数据库操作的一些方便的入口方法,其内部具体的执行会交给 xxDAO 执行,xxDAO 负责自己对应的实体类对象的增删改查,其中执行过程中需要 DaoConfig 和 DatabaseStatement,拿到拼接的 sql 语句和要存储的实体类的参数值,最终会通过原生数据库完成操作,基本就是这样一个过程,可以理解为职责一步步向下传递的过程。