GreenDao 3.2教程

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項目地址

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容