GreenDao的使用(一)

概述

目前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
4
dependencies {
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
12
apply 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
@Entity
public class Student {
@Id(autoincrement = true)//自增长
Long id;//主键
@Unique //学号不可重复值
int studentNo;//学号
String sex;//性别
String name;//姓名
int age;//年龄
@Generated(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;
}
@Generated(hash = 1556870573)
public Student() {
}
//get and set。。。
}

GreenDao初始化

1
2
3
4
5
6
private 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的使用(二)