概述
目前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 {
(autoincrement = true)//自增长
    Long id;//主键
     //学号不可重复值
    int studentNo;//学号
    String sex;//性别
    String name;//姓名
    int age;//年龄
    (hash = 853818008)
    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;
    }
    (hash = 1556870573)
    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的使用(二)》