Android實戰——GreenDao3.2的使用,愛不釋手


1前言

   

GreenDao是一款操作數據庫的神器,經過了2.0版本的升級后,已經被廣泛的開發者使用。確實是很好用,入門簡單,可以剩去了數據庫的建表操作和數據庫SQL的編寫,博主用了一次之后愛不釋手,和以前的數據庫操作一大堆的代碼將它縮成了一句話,舒服

 

2GreenDao3.2的簡介

   

認識GreenDao之前必須知道ORM(Object Relation Mapping對象關系映射),其表現形式就是通過GreenDao將數據庫和Bean對象關聯起來,其表現形式如下圖

 

 

 


GreenDao之所以很流行,跟它的優點是息息相關的,從官網中可以看到這樣一張圖,其表示了在主流的ORM第三方庫中,其對數據庫操作的速度是最快的

 

 

不僅如此,其優點還包括有以下幾點

  • 存取速度快

  • 支持數據庫加密

  • 輕量級

  • 激活實體

  • 支持緩存

  • 代碼自動生成

 

3GreenDao3.2的配置

   

 

GreenDao的配置很簡單,不過需要注意的是,有些人按照正確的配置后卻頻頻出錯,個人也經歷過,最后的原因是網絡有問題。因為校園網的DNS服務很差,所以解析不到GreenDao的依賴網站

 

一、需要在工程(Project)的build.gradle中添加依賴

 

 

 

二、在項目(Module)的build.gradle中添加依賴

 

 

上面是我自己建立工程的gradle文件的配置。另外,我將greendao官網示例的配置文件也貼出來。具體如下:

 

 

到這里就配置成功了

 

4GreenDao3.2的使用

  

配置完成后,最重要的就是GreenDao的使用了,或許使用過Bmob第三方后端雲的同學會知道,他們的API有些相像,都是通過API來拼裝SQL語句的

 

下面就以購物車的實戰來使用GreenDao,這里的購物車展示圖如下

 


我們所知道的數據庫操作需要:數據庫名、表名、字段名,缺一不可,下面就是這三項的創建

 

一、創建Bean對象(表名和字段名)

 

GreenDao需要創建Bean對象之后,該Bean對象就是表名,而它的屬性值就是字段名,其實現是通過注釋的方式來實現的,下面是購物車的Bean對象(每個Bean對象對應一張表)

 

 

 

這里需要注意的是,創建完成之后,需要build gradle來完成我們的代碼自動生成,按Ctrl+F9(或者工具欄build下面的Make Project)對項目進行重新構建即可。自動生成的代碼有

 

  1. Bean實體的構造方法和get、set方法

  2. DaoMaster、DaoSession、DAOS類

 

 

這里對Bean對象的注釋進行解釋

 

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

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

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

  4. @NotNull:屬性不能為空

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

  6. @Unique:該屬性值必須在數據庫中是唯一值

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

假如需要對當前數據庫表(一個實體對象,代表一張數據庫表)中某個字段,或某些個字段,在進行數據插入的時候,假如其中這些字段值相等,則直接執行覆蓋時,可以按照官網的介紹:

@Entity(indexes = {
    @Index(value = "text, date DESC", unique = true)
})
public class Note {
 
    @Id
    private Long id;
 
    @NotNull
    private String text;
    private Date date;
    ...

 也就是類似如下:

value當中,填的字符串名必須要與字段名一致,value中填多個字段的話,則表示只有多個字段的值都同時相等的情況下,在進行插入數據庫時才會進行覆蓋。

 

二、創建數據庫(數據庫名)

 

數據庫的表名和字段都建好了,下面差個數據庫的創建,下面通過傳統和GreenDao的比較來體驗其優點

① 傳統的數據庫創建

 

 

② GreenDao數據庫創建

 

可以發現,GreenDao已經將我們的數據庫創建縮成幾句話,代碼會自動將Bean對象創建成表,不再是傳統的手寫SQL語句。這里的數據庫創建只需要在Application中執行一次即可,這里對幾個類進行解釋

 

  • DevOpenHelper:創建SQLite數據庫的SQLiteOpenHelper的具體實現

  • DaoMaster:GreenDao的頂級對象,作為數據庫對象、用於創建表和刪除表

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

 

由於我們已經創建好了DaoSession和Shop的Bean對象,編譯后會自動生成我們的ShopDao對象,可通過DaoSession獲得

 

ShopDao dao = daoSession.getShopDao();

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

 

三、數據庫的增刪改查

 

數據庫的表名、字段、數據庫都建好了,下面就通過傳統和GreenDao對數據庫的操作來比較體驗其優點

 

① 傳統的增刪改查

 

 

② GreenDao增刪改查

 

效果很明顯,GreenDao的封裝更加短小精悍,語義明朗,下面對GreenDao中

 

5Dao對象其他API的介紹   

  • 增加單個數據 

    • getShopDao().insert(shop);

    • getShopDao().insertOrReplace(shop);

  • 增加多個數據 

    • getShopDao().insertInTx(shopList);

    • getShopDao().insertOrReplaceInTx(shopList);

  • 查詢全部 

    • List< Shop> list = getShopDao().loadAll();

    • List< Shop> list = getShopDao().queryBuilder().list();

  • 查詢附加單個條件 

    • .where()

    • .whereOr()

  • 查詢附加多個條件 

    • .where(, , ,)

    • .whereOr(, , ,)

  • 查詢附加排序 

    • .orderDesc() 倒序

    • .orderAsc() 正序

  • 查詢限制當頁個數 

    • .offset(0) 從數據庫0位置,第一條開始查詢

    • .limit() 查詢多少個
  • 查詢總個數 

    • .count()

  • 修改單個數據 

    • getShopDao().update(shop);

  • 修改多個數據 

    • getShopDao().updateInTx(shopList);

  • 刪除單個數據 

    • getTABUserDao().delete(user);

  • 刪除多個數據 

    • getUserDao().deleteInTx(userList);

  • 刪除數據ByKey 

    • getTABUserDao().deleteByKey();

 

6結語

  

關於GreenDao的的基本概念與基本操作就講到這里,更多對於GreenDao的數據庫操作還需要多多從實戰中去探索,這里只是一個快速入門的引導.GreenDao高級操作還包括有:多表查詢、多表關聯、session緩存等用法,可以到GreenDao的官網進行學習

Github:

  • https://github.com/AndroidHensen/GreenDaoDemo


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM