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)對項目進行重新構建即可。自動生成的代碼有
-
Bean實體的構造方法和get、set方法
-
DaoMaster、DaoSession、DAOS類
這里對Bean對象的注釋進行解釋
-
@Entity:告訴GreenDao該對象為實體,只有被@Entity注釋的Bean類才能被dao類操作
-
@Id:對象的Id,使用Long類型作為EntityId,否則會報錯。(autoincrement = true)表示主鍵會自增,如果false就會使用舊值
-
@Property:可以自定義字段名,注意外鍵不能使用該屬性
-
@NotNull:屬性不能為空
-
@Transient:使用該注釋的屬性不會被存入數據庫的字段中
-
@Unique:該屬性值必須在數據庫中是唯一值
-
@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