GreenDao作為一個ORM框架,大家都應該聽說過。過多廢話不說,直接上干貨。實際是沒話說,不會介紹,也不想去翻譯官網的那些什么輕量級,高效的,快速開發(fā)一些什么優(yōu)點。想了解的朋友,直接去官網看吧。
GreenDao的引入
無非就是配置Gradle
// In your root build.gradle file:
buildscript {
repositories {
jcenter()
mavenCentral() // add repository
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.1'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
}
}
// In your app projects build.gradle file:
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
dependencies {
compile 'org.greenrobot:greendao:3.2.2' // add library
}
module的gradle文件
喜歡的朋友,可以更改greenDao的生成路徑。
android {
compileSdkVersion 24
buildToolsVersion '25.0.0'
defaultConfig {
applicationId "com.jeongho.bt3000"
minSdkVersion 21
targetSdkVersion 24
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
sourceSets{
main{
java.srcDirs=['src/main/java','src/main/java-gen']
}
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
greendao{
schemaVersion 1
//設置Gen路徑
targetGenDir=['app/src/main/java-gen']
}
}
Entity實體
就是javabean + 注釋
@Entity
public class DotaHero {
@Id
private long id;
private String name;
private int hp;
private int mp;
private int exp;
@Generated(hash = 623523123)
public DotaHero(long id, String name, int hp, int mp, int exp) {
this.id = id;
this.name = name;
this.hp = hp;
this.mp = mp;
this.exp = exp;
}
@Generated(hash = 500107644)
public DotaHero() {
}
public long getId() {
return this.id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getHp() {
return this.hp;
}
public void setHp(int hp) {
this.hp = hp;
}
public int getMp() {
return this.mp;
}
public void setMp(int mp) {
this.mp = mp;
}
public int getExp() {
return this.exp;
}
public void setExp(int exp) {
this.exp = exp;
}
}
通過daoSession.getXXXXDao()獲取XXXXDao來進行Entity的insert、query等操作
那么問題來了,daoSession怎么生成?
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "DOTA-db", null);
SQLiteDatabase db = helper.getWritableDatabase();
DaoMaster master = new DaoMaster(db);
daoSession = master.newSession();
有的小伙伴發(fā)現(xiàn),DaoMaster導包怎么導不進來,代碼一片紅,整個人一臉懵逼。。。
寫完實體類的時候,重新Make Project(Ctrl+F9/Cmd+F9),就會發(fā)現(xiàn)DaoMaster導進來了。還能通過daoSession獲取到實體類的Dao,真特么神奇。。
增刪改查
增
DotaHeroDao dotaHeroDao = daoSession.getDotaHeroDao();
DotaHero hero = new DotaHero()
hero.setId(1);
hero.setName("Jugg");
hero.setHp(50);
hero.setMp(50);
hero.setExp(200);
dotaHeroDao.insert(hero);
刪
- 根據(jù)ID來刪除
dotaHeroDao.deleteByKey((long) 1);
- 刪除所有
dotaHeroDao.deleteAll();
查
查絕逼是數(shù)據(jù)庫操作中最麻煩的了。想想腦袋都大。
GreenDao中是使用QueryBuilder來進行數(shù)據(jù)查詢,省去了編寫大量的SQL語句。
舉個最簡單的例子:
- 查詢HP等于60的所有英雄
List<DotaHero> heros = dotaHeroDao.queryBuilder()
.where(DotaHeroDao.Properties.Hp.eq(60))
.list();
- 根據(jù)HP順序排列、倒序排列
List<DotaHero> heros = dotaHeroDao.queryBuilder()
.orderAsc(DotaHeroDao.Properties.Hp)
.list();
List<DotaHero> heros = dotaHeroDao.queryBuilder()
.orderDesc(DotaHeroDao.Properties.Hp)
.list();
-
輸出查詢結果的子集
limit:限制輸出數(shù)量
//取HP最大的10個英雄
List<DotaHero> heros = dotaHeroDao.queryBuilder()
.orderDesc(DotaHeroDao.Properties.Hp).limit(10)
.list();
offset:設置輸出的偏移量
offset 必須配合limit使用,輸出集合跳過前N個對象
//跳過HP最大的5個 輸出第6~第15的十個英雄
List<DotaHero> heros = dotaHeroDao.queryBuilder()
.orderDesc(DotaHeroDao.Properties.Hp).limit(10).offset(5)
.list();
待續(xù)更新,先上GitHub項目地址