第一步 GreenDao插件引入
首先在工程的build.gradle文件中配置GreenDao插件
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
}
}
然后在使用模块的build.gradle文件中配置GreenDao插件
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao'
第二步 添加GreenDao依赖库并配置
在当前模块中的配置文件中添加GreenDao库的依赖
compile 'org.greenrobot:greendao:3.2.2'
在当前模块中配置数据库。
- 在配置文件中建greendao根结点。
- 通过schemaVersion 配置数据库版本;当数据库表更改(创建表,增减表字段等)时,这个版本号要更改。
- daoPackage 用于配置GreenDao生成的Dao所在的包名,包名默认是entity所在的包。
- targetGenDir 用于配置生成数据库文件的目录;默认目录是build\generated\source\greendao
- generateTests: 设置true自动生成单元测试。默认不生成
- targetGenDirTests: 设置生成单元测试目录。默认为src/androidTest/java
greendao {
schemaVersion 1
daoPackage 'com.indoors.myapplication.dao'
targetGenDir 'src/main/java'
}
第三步 简单Entity的定义
简单的Entity定义,只要在类名上加上注解@Entity就可以了。通过nameInDb 可以指定对应的数据库表名,Indexes 可以指定索引。有哪些可配置项详细可以看Entity注解的定义。
@Index注解可以添加索引。需要name指定索引名,value指定索引的属性,可以指定多个字段为一个索引,也可以指定方向,unique指定是否唯一。
@Entity(nameInDb = "ACCOUNT", indexes = {
@Index(name = "INDEX1", value = "propertyA, propertyB", unique = true),
@Index(name = "INDEX2", value = "propertyA DESC")})
public class Account {
/**
* 账号记录主键,数据库表的自增式ID,在数据库表中名为_id
*/
@Id(autoincrement = true)
@Property(nameInDb = "_id")
private long mAccountID;
/**
* 账号名,即登录名。非空、数据库字段名account_name
*/
@NotNull
@Property(nameInDb = "account_name")
private String mAccount;
/**
* 登录口令,即登录密码。非空、数据库字段名account_key
*/
@NotNull
@Property(nameInDb = "account_key")
private String mPassword;
}
注意:字段必须是非静态的,如果是静态GreenDao将忽略
第四步 数据库的简单使用
在创建完Entity后,build工程,GreenDao将自动生成数据库及Entity对应的数据表操作类。如下图 :
文件位置在 targetGenDir 与 daoPackage 指定的位置。
简单的使用GreenDao生成的类
// 指定数据库文件名为account_manager.db,数据库文件存储位置在context.getDatabasePath();
// 需要通过重写Context的getDatabasetPath(String name)方法实现目录移动。
mHelper = new DaoMaster.DevOpenHelper(context, "account_manager.db");
// 以可写的方式打开一个加密数据库,密钥为输入的字符串。同时加密数据库通过Sqlcipher实现,
// 所以需要添加Sqlcipher的依赖
mDB = mHelper.getEncryptedWritableDb("my secret key");
mDaoSession = new DaoMaster(mDB).newSession();
// 获取数据库表的操作实体
mDao = mDaoSession .getAccountDao();
第五步 数据表的简单操作
获取到数据库表的操作实体(mDao)之后。就可以进行增、删、查、改等操作了。
简单的条件查询
QueryBuilder qb = mDao.queryBuilder();
Query<Account> query = qb.where(AccountDao.Properties.MAccount.eq("account1")).build();
List<Account> accounts = query.list();
简单的条件删除
QueryBuilder qb = mDao.queryBuilder();
DeleteQuery<Account> dq = qb.where(AccountDao.Properties.MAccount.eq("account1"))
.buildDelete();
dq.executeDeleteWithoutDetachingEntities();
目前暂时并发现按查询条件更新的方法