1. 程式人生 > >Android GreenDao基本使用

Android GreenDao基本使用

一、關於GreenDao

greenDao應該算是當前最火的資料庫開源框架了,它是一個將物件對映到SQLite資料庫中的輕量且快速的ORM(object / relational mapping)解決方案。 
關於greenDAO的其他相關資訊可以看官網greenDAO

二、GreenDao理解

DAO的core library中有以下幾個核心類,也是後面常用到的,先來大概瞭解下他們的結構,不然直接看他們的使用會雲裡霧裡。 

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

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

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

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

三、greenDAO 優勢

優點:一個精簡的庫、效能最大化、記憶體開銷最小化、易於使用的 APIs、對 Android 進行高度優化

四、GreenDao 3.0使用

GreenDao 3.0採用註解的方式來定義實體類,通過gradle外掛生成相應的程式碼。

1,首先在project的gradle檔案中引入greenDAO外掛,引入之後如下:

dependencies {  
     classpath 'com.android.tools.build:gradle:3.0.0-alpha9'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'

    // NOTE: Do not place your application dependencies here; they belong  
    // in the individual module build.gradle files  
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2,然後在module的gradle檔案中新增greenDAO的外掛,並引入相關類庫,修改之後如下:

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

    greendao{ 
        schemaVersion 1  //指定資料庫schema版本號,遷移等操作會用到;
        daoPackage 'com.greendao.gen'//dao的包名,包名預設是entity所在的包
        targetGenDir 'src/main/java'  //生成資料庫檔案的目錄
    }  
} 
dependencies {  
    ...  
    ...  

    compile 'org.greenrobot:greendao:3.1.0'  
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

在gradle的根模組中加入上述程式碼,就完成了我們的基本配置了。

3,建立一個User的實體類

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

@Entity表示這個實體類一會會在資料庫中生成對應的表, 
@Id表示該欄位是id,注意該欄位的資料型別為包裝型別Long 
@Property則表示該屬性將作為表的一個欄位,其中nameInDb看名字就知道這個屬性在資料庫中對應的資料名稱。 
@Transient,該註解表示這個屬性將不會作為資料表中的一個欄位。 
@NotNull表示該欄位不可以為空 
@Unique表示該欄位唯一。小夥伴們有興趣可以自行研究。

4,MakeProject

編譯專案(Android快捷鍵:Ctrl+F9),User實體類會自動編譯,生成get、set方法並且會在com.greendao.gen目錄下生成三個檔案,並且還會在我們的包下生成DaoMaster和DaoSession。 
這裡寫圖片描述

五、GreenDao使用

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

public class MyApplication extends Application {
 private DaoMaster.DevOpenHelper mHelper;
 private SQLiteDatabase db;
 private DaoMaster mDaoMaster;
 private DaoSession mDaoSession;
 public static MyApplication instances;

 @Override    
 public void onCreate() {
     super.onCreate();
     instances = this;
     setDatabase();
 }

 public static MyApplication getInstances(){
     return instances;
 }

/**
 * 設定greenDao
 */
private void setDatabase() {
    // 通過 DaoMaster 的內部類 DevOpenHelper,你可以得到一個便利的 SQLiteOpenHelper 物件。
    // 可能你已經注意到了,你並不需要去編寫「CREATE TABLE」這樣的 SQL 語句,因為 greenDAO 已經幫你做了。
    // 注意:預設的 DaoMaster.DevOpenHelper 會在資料庫升級時,刪除所有的表,意味著這將導致資料的丟失。
    // 所以,在正式的專案中,你還應該做一層封裝,來實現資料庫的安全升級。
    mHelper = new DaoMaster.DevOpenHelper(this, "notes-db", null);
    db = mHelper.getWritableDatabase();
    // 注意:該資料庫連線屬於 DaoMaster,所以多個 Session 指的是相同的資料庫連線。 
    mDaoMaster = new DaoMaster(db); 
    mDaoSession = mDaoMaster.newSession();
}
public DaoSession getDaoSession() {
      return mDaoSession;
}
public SQLiteDatabase getDb() {
      return db;
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

獲取UserDao物件:

 mUserDao = MyApplication.getInstances().getDaoSession().getUserDao();
  • 1

六、簡單的增刪改查實現:

1.增

mUser = new User((long)2,"anye3");
mUserDao.insert(mUser);//新增一個
  • 1
  • 2

2.刪

mUserDao.deleteByKey(id);
  • 1

3.改

mUser = new User((long)2,"anye0803");
mUserDao.update(mUser);
  • 1
  • 2

4.查

List<User> users = mUserDao.loadAll();
String userName = "";
for (int i = 0; i < users.size(); i++) {
    userName += users.get(i).getName()+",";
}
mContext.setText("查詢全部資料==>"+userName);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

更多的操作就不一一介紹了,大家可以根據需要去查詢資料;

七、greendao中的註解

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

八、資料庫升級

資料庫的升級其實就兩個步驟我們來看看:

8.1 修改gradle檔案

首先在module的gradle檔案中修改版本號:

//這裡改為最新的版本號  
schemaVersion 2  
targetGenDir 'src/main/java'  
  • 1
  • 2
  • 3

8.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;  
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

重現編譯專案執行即可。 
一般的資料庫升級這樣就可以了,特殊情況可能需要自己編寫資料庫遷移指令碼,這種時候可以自定義DBHelper,定義方式如下,注意繼承類:

public class DBHelper extends DaoMaster.OpenHelper {  
    public static final String DBNAME = "lenve.db";  

    public DBHelper(Context context) {  
        super(context, DBNAME, null);  
    }  

    @Override  
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
        super.onUpgrade(db, oldVersion, newVersion);  
    }  
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

可以在onUpgrade方法中進行資料庫的遷移,如果自定義了DBHelper,則資料庫的初始化變為如下方式:

DBHelper devOpenHelper = new DBHelper(this);  
DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDb());  
DaoSession daoSession = daoMaster.newSession();  
userDao = daoSession.getUserDao(); 
  • 1
  • 2
  • 3
  • 4

最後, 
總體來說,GreenDao3.0在配置上相對於2.0要簡單的多。 
正在搭建一個Android的 Demo ,有本文的程式碼,下載連結:Github地址,,如果喜歡的話可以star一下。 

相關推薦

Android GreenDao基本使用

一、關於GreenDao greenDao應該算是當前最火的資料庫開源框架了,它是一個將物件對映到SQLite資料庫中的輕量且快速的ORM(object / relational mapping)解決方案。  關於greenDAO的其他相關資訊可以看官網greenDAO

Android GreenDao基本使用

前言 Android 本地資料庫有很多,Sqlite、Dbutils、LitePa、GreenDao等,其他的幾個資料庫框架都用過了,GreenDao還未在專案中用過,所以在這裡記錄下GreenDao的基本使用。   一、新增GreenDao支援  1.1 在

Android greendao基本使用

1.新增依賴  在bulid.gradle檔案下的dependencies下新增所需依賴 compile 'org.greenrobot:greendao:3.2.2' // add library compile 'org.greenrobot:greendao-gen

Android Studio中 GreenDao 基本配置

一、需要在工程的build.gradle中新增依賴 buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gr

Android開發基本環境搭建

image studio 基本 配置環境 http 學習 配置 ide 進步 安卓開發學習筆記,共同學習,共同進步。 Android軟件開發首先要安裝JDK,本文以windows10 64操作系統為例演示安裝步驟。 1.下載JDK    2.安裝    3.配置環境變量  

Android ContentProvider基本用法

truct 數據共享 implement notify username 資源 per mime類型 exc 轉自:https://www.jianshu.com/p/601086916c8f 一、基本概念 ContentProvider是Android系統中提

Android GreenDao 深查詢 n:m 的關系

適合 oid == sta link png getc 可能 圖片 在我的應用程序這樣設計的關系:和我想選擇至少一個用戶作為一個朋友的所有聊天。 基本上,我想要執行以下查詢:\ SELECT c.* FROM CHAT c, USER u, UserChats uc

Android GreenDao 在組件化項目中的一個問題 - 2018年7月5日21:15:14

src 組件化 一個 gradle 項目 如果 7月 height greendao      組件化項目使用GreenDao時註意的事項: 1.要在組件化中的基礎庫(domain層)創建實體類; 2.如果sycn之後不能生產Dao文件,先把 module 的buil

Android GreenDao清空數據庫的方法

.sql mas 防止 @override oncreate androi turn tab tee 最近在做項目的時候,為了方便測試人員測試,在應用中加入正式庫和測試庫切換的功能。為了防止正式庫和測試庫切換帶來的數據沖突,切換的時候必須把當前的數據庫清空。代碼如下:

android greenDao使用

org roi github apply adl clas gre 依賴 -c github:https://github.com/greenrobot/greenDAO 先在依賴加上 compile ‘org.greenrobot:greendao-generator:3

Android GreenDao使用教程

extends image mda 自動 所有 andro 沒有 lac cat 1、在build.gradle裏添加相關依賴 apply plugin: ‘org.greenrobot.greendao‘ buildscript { repositori

Android開發 - 基本UI設計

文章目錄 Android開發 - 基本UI設計 1. 頁面部分佔用1/N的情況 2. 分割線的實現 Android開發 - 基本UI設計 本部落格記錄本人在安卓開發時候遇到的一些UI設計的問題以及解決方法

Android GreenDao簡單使用

一些簡單的配置都在上篇部落格中 定義工具類 package soexample.umeng.com.day03greendao; import android.content.Context; import android.database.sqlite.SQLiteDatabase; imp

Android GreenDao資料庫 配置(箭頭所指 你的方向)

mavenCentral() // add repository classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin //依賴 implementation 'org.greenrobot:gree

[Android]Android四大基本元件介紹與生命週期

http://www.cnblogs.com/bravestarrhu/archive/2012/05/02/2479461.html Android四大基本元件介紹與生命週期 Android四大基本元件分別是Activity,S

Android入門——基本控制元件詳解

Android應用開發的一項重要內容就是介面開發。對於使用者來說,不管APP包含的邏輯多麼複雜,功能多麼強大,如果沒有提供友好的圖形互動介面,將很難吸引終端使用者。作為一個程式設計師如何才能開發出友好的圖形介面呢。實際上Android提供了非常豐富UI(User Interface)控制元

Android studio基本知識

1 一般開啟專案後只關心app這個目錄。 1 build目錄:構建目錄,相當於Eclipse中的bin目錄 2 libs:依賴的包 3 src:            

ubantu下的android環境基本配置(全面)

1.jdk的安裝以及配置 1)從這http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.html這個網址下載jdk的安裝包,包名為jdk-8u171-lin

Android基本元件和View和ViewGroup介紹

Android的基本元件 1.1 Activity 1.1.1 Activity代表手機的一個螢幕 1.1.2 一個Android程式由多個Activity組成,即:一個Android程式由多屏內容組成 1.1.3 Activity相當於一個展板,本身

Android基本元件和自定義檢視

Android的基本元件 1 Activity 1.1 Activity代表手機的一個螢幕 1.2 一個Android程式由多個Activity組成,即:一個Android程式由多屏內容組成 1.3 Activity相當於一個展板