green dao 3.0

31
GreenDao 3.0 輕鬆上手 [email protected]

Upload: -

Post on 10-Feb-2017

133 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Green dao 3.0

GreenDao 3.0 輕鬆上手

彥彬

[email protected]

Page 2: Green dao 3.0

GreenDao Features

1. Performance2. Small SIze3. Easy to use4. Database Encryption

Page 3: Green dao 3.0

Github repo

https://github.com/hungyanbin/GreenDaoDemo

Page 4: Green dao 3.0

Gradle setting

Page 5: Green dao 3.0

buildscript {

repositories {

mavenCentral()

}

dependencies {

classpath 'org.greenrobot:greendao-gradle-plugin:3.1.1'

}

}

apply plugin: 'org.greenrobot.greendao' (一定要放在最上面)

dependencies {

compile 'org.greenrobot:greendao:3.1.1'

}

Page 6: Green dao 3.0

Create Entity (init)

Page 7: Green dao 3.0

Create Entity with Annotation@Entitypublic class Student {

@Id(autoincrement = true) private Long id;

@NonNull private String name;}

Page 8: Green dao 3.0

DaoSession and DaoMaster

DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, DB_NAME);

DaoMaster daoMaster = new DaoMaster(helper.getWritableDatabase());

daoSession = daoMaster.newSession();

StudentDao studentDao = daoSession.getStudentDao();

Page 9: Green dao 3.0

DB operation (db_operation)

Page 10: Green dao 3.0

DB operations from Dao

1. InsertStudent student = new Student(null, "name");

long id = studentDao.insert(student);

2. LoadAllList<Student> students = studentDao.loadAll();

Page 11: Green dao 3.0

And Other Operations...

1. DeletestudentDao.delete(student);

2. UpdatestudentDao.update(student);

3. InsertOrReplacestudentDao.insertOrReplace(student);

Page 12: Green dao 3.0

DB upgrade (db_upgrade)

Page 13: Green dao 3.0

Add schema

@Entitypublic class Student {

@Id(autoincrement = true) private Long id;

@NonNull private String name;

private int age;}

Page 14: Green dao 3.0

Gradle setting

greendao { schemaVersion 2}

Page 15: Green dao 3.0

DB query (db_query)

Page 16: Green dao 3.0

Query by String Property

QueryBuilder<Student> studentQueryBuilder = studentDao.queryBuilder();Property nameProperty = StudentDao.Properties.Name;

List<Student> wangStudents = studentQueryBuilder.where(nameProperty.like("王%")) .list();

Page 17: Green dao 3.0

Order by Property

QueryBuilder<Student> studentQueryBuilder = studentDao.queryBuilder();Property ageProperty = StudentDao.Properties.Age;

List<Student> orderedStudents = studentQueryBuilder.orderAsc(ageProperty) .list();

Page 18: Green dao 3.0

Compound query

QueryBuilder<Student> studentQueryBuilder = studentDao.queryBuilder();Property nameProperty = StudentDao.Properties.Name;Property ageProperty = StudentDao.Properties.Age;

List<Student> students = studentQueryBuilder.where( studentQueryBuilder.and(nameProperty.like("陳%"), ageProperty.ge(16))) .list();

Page 19: Green dao 3.0

And Other Queries...

1. or()

2. gt()

3. le()

4. lt()

5. notEq()

6. etc...

Page 20: Green dao 3.0

Relation (relation)

Page 21: Green dao 3.0

@ToMany Annotation@Entitypublic class Teacher {

@Id(autoincrement = true) private Long id;

@NonNull private String name;

@ToMany(joinProperties = { @JoinProperty(name = "id", referencedName = "teacherId") }) private List<Student> students;}

Page 22: Green dao 3.0

@ToMany Annotation@Entitypublic class Teacher {

@Id(autoincrement = true) private Long id;

@NonNull private String name;

@ToMany(joinProperties = { @JoinProperty(name = "id", referencedName = "teacherId") }) private List<Student> students;}

Page 23: Green dao 3.0

@ToMany Annotation@Entitypublic class Teacher {

@Id(autoincrement = true) private Long id;

@NonNull private String name;

@ToMany(joinProperties = { @JoinProperty(name = "id", referencedName = "teacherId") }) private List<Student> students;}

Page 24: Green dao 3.0

@ToMany Annotation@Entitypublic class Teacher {

@Id(autoincrement = true) private Long id;

@NonNull private String name;

@ToMany(joinProperties = { @JoinProperty(name = "id", referencedName = "teacherId") }) private List<Student> students;}

@Entitypublic class Student {

@Id(autoincrement = true) private Long id;

private long teacherId;

@ToOne(joinProperty = "teacherId") private Teacher teacher;

@NonNull private String name;

private int age;}

Page 25: Green dao 3.0

@ToMany Annotation@Entitypublic class Teacher {

@Id(autoincrement = true) private Long id;

@NonNull private String name;

@ToMany(joinProperties = { @JoinProperty(name = "id", referencedName = "teacherId") }) private List<Student> students;}

@Entitypublic class Student {

@Id(autoincrement = true) private Long id;

private long teacherId;

@ToOne(joinProperty = "teacherId") private Teacher teacher;

@NonNull private String name;

private int age;}

Page 26: Green dao 3.0

Auto generate methods@Generated(hash = 1942392019)public void refresh() { if (myDao == null) { throw new DaoException("Entity is detached from DAO context"); } myDao.refresh(this);}

@Generated(hash = 713229351)public void update() { if (myDao == null) { throw new DaoException("Entity is detached from DAO context"); } myDao.update(this);}

Page 27: Green dao 3.0

Others

Page 28: Green dao 3.0

Proguard-keepclass class * extends org.greenrobot.greendao.AbstractDao {

public static java.lang.String TABLENAME;

}

-keep class **$Properties

#If not integrating with SQLCipher a rule like below (or similar) needs be added:

-dontwarn org.greenrobot.greendao.database.**

Page 29: Green dao 3.0

3.1 Rx support

1. RxDao

xxDao.rx()

2. RxQuery

xxQueryBuilder.rx()

Page 30: Green dao 3.0

SQLCypher

還沒研究.....

Page 31: Green dao 3.0

Thank you!