依赖
//根gradle
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
//app gradle
apply plugin: 'org.greenrobot.greendao'
greendao {
schemaVersion 1 //数据库版本号
daoPackage '包名.database' //设置时生成代码的目录
targetGenDir 'src/main/java' //设置DaoMaster、DaoSession、Dao目录
}
dependencies {
compile 'org.greenrobot:greendao:3.2.2'
}
GreenDao简介
GreenDao是一个将对象映射到SQLite数据库中的轻量且快速的ORM数据库框架,本文将 讲解如何集成GreenDao3.0环境,如何使用GreenDao自动生成代码及注解的使用。
GreenDao GitHub
GreenDao3.0优势
GreenDao相较于ORMLite等其他数据库框架有以下优势:
1. 一个精简的库
2. 性能最大化
3. 内存开销最小化
4. 易于使用的 APIs
5. 对 Android 进行高度优化
而GreenDao3.0的版本主要使用注解方式定义实体类,通过gradle插件生成相应的代码。
用法:
类注解
@Entity(
schema = "myschema",
active = true,
nameInDb = "AWESOME_USERS",
createInDb = true
)
@Entity:用于标识当前实体需要GreenDao生成代码。
schema:项目中存在多个Schema时,表明当前实体属于哪个Schema。
active:标记实体是否处于活动状态,活动状态才支持更新删除刷新等操作。 nameInDb:存储在数据库中的表名,不写默认与类名一致。 createInDb:标记创建数据库表,若有多个实体关联此表可设为false避免重复创建,默认 为true。
属性注解
@Id :主键Long型,可以通过@Id(autoincrement = true)设置自增长。
@Property:设置一个非默认关系映射所对应的列名,默认是的使用字段名例如@Property (nameInDb="name")。
@NotNul:设置数据库表当前列不能为空。
@OrderBy:指定排序。
@Transient:添加此标记之后不会生成数据库表的列。
@Generated:为build之后GreenDao自动生成的注解,为防止重复,每一块代码生成后 会加个hash作为标记。
-----------------------------------------------------------------------------------------------------------------
@ToMany:定义与多个实体对象一对多的关联,referencedJoinProperty为外键 约束。
Query
主键
load(Long key)
loadAll()
查询
Query query = employeeDao.queryBuilder()
.where(**.Properties.**.eq(**),
**.Properties.**.ge(**))
.build();
子线程查询
private void queryThread() {
fi{nal Query query = **Dao.queryBuilder().build();
new Thread(){
@Override
public void run()
List list = query.forCurrentThread().list();
}
}.start();
}
查询条件判断
eq,noteq与like查询
eq判断值是否相等
noteq与eq相反,判断值是否不等,通常用来模糊查找,返回指定类型的集合。
like相当于通配符查询,包含查询值的实体都会返回,同样模糊查找,返回指定 类型的集合。
>、<、>=、<=查询
分别对应方法:
>: gt()
<: lt()
>=: ge()
<=: le()
isNull与isNotNull
为空与不为空,判断数据库中有无数据。
排序
对查询结果进行排序,有升序与降序。
List<**> list = **Dao.queryBuilder()
.where(***)
.orderAsc(**Dao.Properties.**)
.list();
删除
**Dao.deleteAll()
**Dao.deleteBykey(Long key)
**Dao.delete(对象)
更新
//修改属性
对象.set**()
//进行更新
**Dao.update(对象);