GreenDao的使用簡介

TTMMJJ99發表於2017-11-15

1簡介

greenDAO功能
物件/關係對映(ORM)
這裡寫圖片描述
greenDAO Android ORMgreenDAO的本質是為儲存在關聯式資料庫SQLite中的資料提供一個物件導向的介面。只需定義資料模型,greenDAO將建立Java資料物件(實體)和DAO(資料訪問物件)。這將為您節省很多無聊的程式碼,只是來回移動資料。除此之外,greenDAO還提供了一些高階的ORM功能,如會話快取,預先載入和活動實體。

2

GreenDao 優點:
  • 效能最高(可能是Android上最快的ORM); 我們的基準測試也是開源的
  • 易於使用強大的API覆蓋關係和聯接
  • 最小的記憶體消耗
  • 小型庫(<100KB)可以保持較低的構建時間,並避免65k方法的限制
  • 資料庫加密:greenDAO支援SQLCipher保證使用者資料安全
  • 強大的社群:超過5000個GitHub明星表明,這裡有一個強大而活躍的社群

3大致結構

這裡寫圖片描述
DaoMaster:Dao中的管理者。它儲存了sqlitedatebase物件以及操作DAO classes(注意:不是物件)。其提供了一些建立和刪除table的靜態方法,其內部類OpenHelper和DevOpenHelper實現了
SQLiteOpenHelper,並建立資料庫的框架。

DaoSession:會話層。操作具體的DAO物件(注意:是物件),比如各種getter方法。

XXXDao:實際生成的某某DAO類,通常對應具體的java類,比如NoteDao等。其有更多的許可權和方法來運算元據庫元素。

XXXEntity:持久的實體物件。通常代表了一個資料庫row的標準java properties。

4以下是一些使用
首先在工程的build.gradle新增

buildscript {

    repositories {
        google()
        jcenter()
        mavenCentral() // add repository 需要新增的倉庫
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin 需要新增的依賴

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

5然後專案的build.gradle新增

apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin需要新增的外掛
android {
  ...
}
//對greendao的設定
greendao {
    schemaVersion 2
    daoPackage 'com.wyj.test.greendao'//設定DaoMaster、DaoSession、Dao包名
    targetGenDir 'src/main/java'//設定DaoMaster、DaoSession、Dao目錄即在什麼目錄下生成
}
dependencies {
    ...
    ...
    compile 'org.greenrobot:greendao:3.2.2' // add library 需要新增的依賴新增
}

6建立實體類

@Entity//表示這個實體類一會會在資料庫中生成對應的表
public class User {
    @Id //表示該欄位是id,注意該欄位的資料型別為包裝型別Long
    private Long id; 
    @Property(nameInDb = "NAME")//表示該屬性將作為表的一個欄位,其中nameInDb看名字就知道這個屬性在資料庫中對應的資料名稱
    private String name; 
    @Transient //註解表示這個屬性將不會作為資料表中的一個欄位
    private int tempUsageCount; // not persisted  
}

7生成程式碼 點選build下的make project 快捷鍵 (Ctrl+F9)
這裡寫圖片描述

8使用 單例
步驟:即:先建立了一個SQLiteOpenHelper並建立連線到一個具體資料庫;再根據具體的datebase建立一個master物件用於;最後通過master建立一個資料庫的會話操作。
程式碼

public class MyApp extends Application {
    public static final boolean ENCRYPTED = true;

    private DaoSession daoSession;

    @Override
    public void onCreate() {
        super.onCreate();

        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "notes-db");
        Database db = helper.getWritableDb();
        daoSession = new DaoMaster(db).newSession();
    }

    public DaoSession getDaoSession() {
        return daoSession;
    }
}

9呼叫

DaoSession daoSession = ((MyApp) getApplication()).getDaoSession();
        // do this in your activities/fragments to get hold of a DAO
        userDao = daoSession.getUserDao();

簡單的增刪改查

 //增
               User user = new User(null, "123" + i);
               userDao.insert(user);
               //刪
               userDao.deleteByKey((long) i);
               //改
               User mUser = new User((long) 2, "anye0803");
               //查
               List<User> users = userDao.loadAll();
               String userName = "";
               for (int i = 0; i < users.size(); i++) {
                   userName += users.get(i).getName() + ",";
               }
               tv.setText("全部資料"+userName);

greendao中的註解
(一) @Entity 定義實體
@nameInDb 在資料庫中的名字,如不寫則為實體中類名
@indexes 索引
@createInDb 是否建立表,預設為true,false時不建立
@schema 指定架構名稱為實體
@active 無論是更新生成都重新整理
(二) @Id
(三) @NotNull 不為null
(四) @Unique 唯一約束
(五) @ToMany 一對多
(六) @OrderBy 排序
(七) @ToOne 一對一
(八) @Transient 不儲存在資料庫中
(九) @generated 由greendao產生的建構函式或方法
資料庫升級
首先在module的gradle檔案中修改版本號:

greendao {
    schemaVersion 2//修改此值
}

修改實體類

@Entity  
public class User {  
    @Property  
    private int age;  
    @Property  
    private String password;  
    @Id  
    private Long id;  
    @Property(nameInDb = "USERNAME")  
    private String username;  
    @Property(nameInDb = "NICKNAME")  
    private String nickname;  
}

然後重新編譯
基本就是這樣如果還不滿意有官方的api和GitHub連結可以自己研究研究

官網地址:http://greenrobot.org/greendao/