green dao 3.0
TRANSCRIPT
GreenDao Features
1. Performance2. Small SIze3. Easy to use4. Database Encryption
Github repo
https://github.com/hungyanbin/GreenDaoDemo
Gradle setting
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'
}
Create Entity (init)
Create Entity with Annotation@Entitypublic class Student {
@Id(autoincrement = true) private Long id;
@NonNull private String name;}
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();
DB operation (db_operation)
DB operations from Dao
1. InsertStudent student = new Student(null, "name");
long id = studentDao.insert(student);
2. LoadAllList<Student> students = studentDao.loadAll();
And Other Operations...
1. DeletestudentDao.delete(student);
2. UpdatestudentDao.update(student);
3. InsertOrReplacestudentDao.insertOrReplace(student);
DB upgrade (db_upgrade)
Add schema
@Entitypublic class Student {
@Id(autoincrement = true) private Long id;
@NonNull private String name;
private int age;}
Gradle setting
greendao { schemaVersion 2}
DB query (db_query)
Query by String Property
QueryBuilder<Student> studentQueryBuilder = studentDao.queryBuilder();Property nameProperty = StudentDao.Properties.Name;
List<Student> wangStudents = studentQueryBuilder.where(nameProperty.like("王%")) .list();
Order by Property
QueryBuilder<Student> studentQueryBuilder = studentDao.queryBuilder();Property ageProperty = StudentDao.Properties.Age;
List<Student> orderedStudents = studentQueryBuilder.orderAsc(ageProperty) .list();
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();
And Other Queries...
1. or()
2. gt()
3. le()
4. lt()
5. notEq()
6. etc...
Relation (relation)
@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;}
@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;}
@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;}
@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;}
@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;}
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);}
Others
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.**
3.1 Rx support
1. RxDao
xxDao.rx()
2. RxQuery
xxQueryBuilder.rx()
SQLCypher
還沒研究.....
Thank you!