概述
目前GreenDao是最佳的ORM的方案,无论从使用复杂程度还是效率方面,GreenDao的表现都非常出色。当然,每个优秀的框架涉及的知识点或者设计模式都会相对复杂一点,以至于后来的开发人员使用的时候才那么容易上手。
GreenDao介绍
GreenDAO是一个开源的Android ORM(“对象/关系映射”),通过GreenDao,我们可以更快速的操作数据库,我们可以使用简单的面相对象的API来存储,更新,删除和查询Java对象。
优缺点
- 高性能
官方统计图: - 易使用
- 最小的内存消耗;
- 数据库加密:greenDAO支持SQLCipher,以确保用户的数据安全;
主要成员介绍
- DaoMaster:继承自AbstractDaoMaster,提供静态方法删除或者创建数据库,基于DatabaseOpenHelper实现
- DaoSession:管理这Dao对象。
- EntitiesDao:Entities的操作类,可对Entities进行增删改查等操作
- Entities:可持久化对象。通常, 实体对象代表一个数据库行使用标准 Java 属性(如一个JavaBean )。
具体使用
简单配置
project的build.gradle文件1
2
3
4dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'//添加GreenDao插件
}
app的build.gradle文件1
2
3
4
5
6
7
8
9
10
11
12apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
android{
greendao {
schemaVersion 1//数据库版本号
daoPackage 'com.greedao.greedao_demo.greendao'//设置DaoMaster、DaoSession、Dao包名
targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录,makeproject生成的目录
}
}
dependencies {
implementation 'org.greenrobot:greendao:3.2.0'//添加依赖
}
简单使用
创建学生类1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Student {
true)//自增长 (autoincrement =
Long id;//主键
//学号不可重复值
int studentNo;//学号
String sex;//性别
String name;//姓名
int age;//年龄
853818008) (hash =
public Student(Long id, int studentNo, String sex, String name, int age) {
this.id = id;
this.studentNo = studentNo;
this.sex = sex;
this.name = name;
this.age = age;
}
1556870573) (hash =
public Student() {
}
//get and set。。。
}
GreenDao初始化1
2
3
4
5
6private void initGreenDao() {
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "greedao_test.db");//创建数据库
SQLiteDatabase db = helper.getWritableDatabase();
DaoMaster daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
}
数据库的操作无非就是增删改查,后面根据api来操作非常简单就不再多说了。
现在主要看看Entity类的注解
注解
- @Entity(类注解):只有在实体类标注了Entity,才能对该实体进行表创建等操作
- 属性注解:
@id:用此注解标注属性,意为该属性为表主键。且该属性必须为Long,long也不行。
@Property:允许开发这自己定义表字段,例如age默认对应的表字段为AGE,如果设置了Property(nameInDb=”age”),那么该属性在表中对应的字段名就是age。
@NotNull:顾名思义,当前字段不可为空。
@Unique:跟主键类似,插入的数据该字段不可重复。
@Transient :添加次标记之后不会生成数据库表的列。标记要从持久性中排除的属性。将它们用于临时状态等。或者,您也可以使用Java中的transient关键字。 - 关系注解:
@ToOne:一对一对应
@ToMany:一对多
后续
接下来会展示GreenDao在实际项目中的使用,包括注解,多表关联等等。
具体参看《GreenDao的使用(二)》