介绍
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就是为了解决这个需求的。