GreenDao使用

前言

Greendao是一款用于數(shù)據(jù)庫創(chuàng)建與管理的框架,由于原生SQLite語言比較復雜繁瑣,使得不少程序員不得不去學習SQLite原生語言,但是學習成本高,效率低下,所以不少公司致力于開發(fā)一款簡單的數(shù)據(jù)庫管理框架,較為著名的就有Greendao和ORMLite,但是就數(shù)據(jù)分析來看,Greendao的效率是高于ORMLite及其他框架的,是目前該行業(yè)的領先者。也因為Greendao的使用方法簡便,且效率高使得其成為目前使用最為廣泛的數(shù)據(jù)庫管理框架,這也是廣大程序員的福音。

優(yōu)點

  • 存取速度快
  • 支持數(shù)據(jù)庫加密
  • 輕量級
  • 激活實體
  • 支持緩存
  • 代碼自動生成

步驟

流程圖

第一步 環(huán)境配置

在項目的build.gradle文件下進入如下配置 (注釋的地方就是要添加的東西)

  buildscript {
    repositories {
    jcenter()
    mavenCentral() // add repository
}
dependencies {
    classpath 'com.android.tools.build:gradle:3.1.1'
    classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
}
}

在App的build.gradle文件下進行如下配置 (注釋的地方就是要添加的東西)

apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin

greendao {
schemaVersion 1 //數(shù)據(jù)庫版本
targetGenDir 'src/main/java' //指定生成代碼的目錄
daoPackage //生成代碼到具體包下
}

dependencies {
  implementation 'org.greenrobot:greendao:3.2.2' // add library
}

第二步 新建實體類用@Entity注解,實體類中的屬性即為數(shù)據(jù)庫中對應的字段,最后build項目即會生成相應的代碼

build之前實體類如下:

@Entity
public class HistoryData {

private String date;
private String history;

}

build之后實體類如下:

@Entity
public class HistoryData {

private String date;
private String history;
@Generated(hash = 895975915)
public HistoryData(String date, String history) {
    this.date = date;
    this.history = history;
}
@Generated(hash = 422767273)
public HistoryData() {
}
public String getDate() {
    return this.date;
}
public void setDate(String date) {
    this.date = date;
}
public String getHistory() {
    return this.history;
}
public void setHistory(String history) {
    this.history = history;
}

}

比build之前多了構造方法和set,get方法
另外自動生成了DaoMaster,DaoSession,HistoryDataDao三個類

注解解釋

  1. @Entity:告訴GreenDao該對象為實體,只有被@Entity注釋的Bean類才能被dao類操作

  2. @Id:對象的Id,使用Long類型作為EntityId,否則會報錯。(autoincrement = true)表示主鍵會自增,如果false就會使用舊值

  3. @Property:可以自定義字段名,注意外鍵不能使用該屬性

  4. @NotNull:屬性不能為空

  5. @Transient:使用該注釋的屬性不會被存入數(shù)據(jù)庫的字段中

  6. @Unique:該屬性值必須在數(shù)據(jù)庫中是唯一值

  7. @Generated:編譯后自動生成的構造函數(shù)、方法等的注釋,提示構造函數(shù)、方法等不能被修改

第三步 創(chuàng)建數(shù)據(jù)庫

public class MyApplication extends Application{

private static MyApplication mApp;
private static DaoSession mDaoSession;
@Override
public void onCreate() {
    super.onCreate();
    mApp = this;
    //配置數(shù)據(jù)庫
    initGreenDao();
}

private void initGreenDao() {
    //創(chuàng)建數(shù)據(jù)庫mydb.db
    DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(mApp,"mydb.db");
    //獲取可寫數(shù)據(jù)庫
    SQLiteDatabase database = helper.getWritableDatabase();
    //獲取數(shù)據(jù)庫對象
    DaoMaster daoMaster = new DaoMaster(database);
    //獲取Dao對象管理者
    mDaoSession = daoMaster.newSession();
}

public static DaoSession getmDaoSession(){
    return mDaoSession;
}
}

可以發(fā)現(xiàn),GreenDao已經(jīng)將我們的數(shù)據(jù)庫創(chuàng)建縮成幾句話,代碼會自動將實體類對象創(chuàng)建成表,不再是傳統(tǒng)的手寫SQL語句。這里的數(shù)據(jù)庫創(chuàng)建只需要在MyApplication中執(zhí)行一次即可,這里對幾個類進行解釋

  • DevOpenHelper:創(chuàng)建SQLite數(shù)據(jù)庫的SQLiteOpenHelper的具體實現(xiàn)

  • DaoMaster:GreenDao的頂級對象,作為數(shù)據(jù)庫對象、用于創(chuàng)建表和刪除表

  • DaoSession:管理所有的Dao對象,Dao對象中存在著增刪改查等API

由于我們已經(jīng)創(chuàng)建好了DaoSession和HistoryData的實體類對象,編譯后會自動生成我們的HistoryDataDao對象,可通過DaoSession獲得

 HistoryDataDao historyDataDao = daoSession.getHistoryDataDao();

這里的Dao(Data Access Object)是指數(shù)據(jù)訪問接口,即提供了數(shù)據(jù)庫操作一些API接口,可通過dao進行增刪改查操作

第四步 數(shù)據(jù)庫的增刪改查

后續(xù)更新...

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容