介绍
GreenDao 优点
- 性能高,号称Android最快的关系型数据库
 - 内存占用小
 - 库文件比较小,小于100K,编译时间低,而且可以避免65K方法限制
 - 支持数据库加密 greendao支持SQLCipher进行数据库加密 有关SQLCipher可以参考这篇博客Android数据存储之Sqlite采用SQLCipher数据库加密实战
 - 简洁易用的API
 
GreenDao 3.0基本使用
在.gradle添加依赖
  | 
  | 
需要配置数据库的基本属性
  | 
  | 
- schemaVersion:数据库版本号
 - daoPackage:设置DaoMaster, DaoSession, Dao包名
 - targetGenDir: 设置DaoMaster, DaoSession, Dao目录
 - targetGenDirTest: 设置生成单元测试目录
 - generateTests 设置自动生成单元测试用例
 
创建实体
  | 
  | 
实体@Entity注解:
- schema:表示GreenDao当前实体属于哪个schema
 - active: 标记一个实体处于活动状态,活动实体有更新,删除和刷新方法
 - nameInDb: 在数据中使用的别名,默认使用的是实名的类别
 - indexes: 定义索引,可以跨越多个列
 - createInDb: 标记创建数据库表
 
基础属性注解:
- @Id: 主键 Long型,可以通过@Id(autoincrement = true)设置自增长
 - @Property: 设置一个非默认关系映射所对应的列名,默认是的使用字段名 举例:@Property (nameInDb=”name”)
 - @NotNul:设置数据库表当前列不能为空
 - @Transient :添加次标记之后不会生成数据库表的列
 
索引注解:
- @Index:使用@Index作为一个属性来创建一个索引,通过name设置索引别名,也可以通过unique给索引添加约束
 - @Unique:向数据库列添加了一个唯一的约束
 
关系注解:
- @ToOne:定义与另一个实体(一个实体对象)的关系
 - @ToMany:定义与多个实体对象的关系
 
编译生成DaoMaster, DaoSession, Dao

创建一个数据库管理者单例
12345678910111213141516171819202122232425262728public class DBManager {private final static String dbName = "test_db";private static DBManager mInstance;private DaoMaster.DevOpenHelper openHelper;private Context context;public DBManager(Context context) {this.context = context;openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);}/*** 获取单例引用** @param context* @return*/public static DBManager getInstance(Context context) {if (mInstance == null) {synchronized (DBManager.class) {if (mInstance == null) {mInstance = new DBManager(context);}}}return mInstance;}}获取可读可写数据库
  | 
  | 
外键使用(@ToOne, @ToMany)
  | 
  | 
- joinProperties这个参数是referencedJoinProperty 参数的升级版。在referencedJoinProperty参数中我们发现俩个实体关联的外键是CustomerId与id,但是如果我们的需求是外键不能通过id来定义,需要用自己自定义属性来定义,第一种方法就没法用了,而joinProperties就是为了解决这个需求的。