GreenDao 3.2.0 的基本使用
前言
Android開發(fā)中我們或多或少都會接觸到數(shù)據(jù)庫。Android中提供了一個占用內(nèi)存極小的關(guān)系型數(shù)據(jù)庫-SQLite。雖然Android系統(tǒng)中提供了許多操作SQLite的API,但是我們還是需要手動去編寫SQL語句,這經(jīng)常會出現(xiàn)一些莫名其妙的問題(😂,不要問我為什么)。所以便出現(xiàn)了許多ORM(對象關(guān)系映射)框架。其中比較著名的有GreenDao、OrmLite、Litepal等。下面主要介紹一下GreenDao,我平時用的最多的也是GreenDao。
GreenDao簡介
官網(wǎng)上的介紹,greenDAO 是一個將對象映射到 SQLite 數(shù)據(jù)庫中的輕量且快速的 ORM 解決方案。(greenDAO is a light & fast ORM solution that maps objects to SQLite databases.)
GreenDao特點
- 性能最大化,可能是Android平臺上最快的ORM框架
- 易于使用的API
- 最小的內(nèi)存開銷
- 依賴體積小
- 支持?jǐn)?shù)據(jù)庫加密
- 強(qiáng)大的社區(qū)支持
GreenDao有如此多的有點,我們還有什么理由不去使用它呢。
GreenDao配置
在build.gradle(Module:app)中添加下面代碼:
buildscript { repositories { mavenCentral() } dependencies { classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1' } } apply plugin: 'org.greenrobot.greendao' dependencies { compile 'org.greenrobot:greendao:3.2.0' }
其他配置
在build.gradle(Module:app)中添加:
greendao { schemaVersion 1//數(shù)據(jù)庫版本號 daoPackage 'com.com.sky.downloader.greendao'//設(shè)置DaoMaster、DaoSession、Dao包名 targetGenDir 'src/main/java'//設(shè)置DaoMaster、DaoSession、Dao目錄 //targetGenDirTest:設(shè)置生成單元測試目錄 //generateTests:設(shè)置自動生成單元測試用例 }
上述配置是可選項,如果不配置,則默認(rèn)生成在build下:
GreenDao的基本配置就已經(jīng)完成了,下面我們編寫一個實體類。
實體類User
@Entity public class User { @Id(autoincrement = true) private Long id; private String name; private int age; }
相關(guān)注解說明:
實體@Entity注解
schema:告知GreenDao當(dāng)前實體屬于哪個schema
active:標(biāo)記一個實體處于活躍狀態(tài),活動實體有更新、刪除和刷新方法
nameInDb:在數(shù)據(jù)庫中使用的別名,默認(rèn)使用的是實體的類名
indexes:定義索引,可以跨越多個列
createInDb:標(biāo)記創(chuàng)建數(shù)據(jù)庫表
基礎(chǔ)屬性注解
@Id:主鍵 Long 型,可以通過@Id(autoincrement = true)設(shè)置自增長
@Property:設(shè)置一個非默認(rèn)關(guān)系映射所對應(yīng)的列名,默認(rèn)是使用字段名,例如:@Property(nameInDb = "name")
@NotNull:設(shè)置數(shù)據(jù)庫表當(dāng)前列不能為空
@Transient:添加此標(biāo)記后不會生成數(shù)據(jù)庫表的列
索引注解
@Index:使用@Index作為一個屬性來創(chuàng)建一個索引,通過name設(shè)置索引別名,也可以通過unique給索引添加約束
@Unique:向數(shù)據(jù)庫添加了一個唯一的約束
關(guān)系注解
@ToOne:定義與另一個實體(一個實體對象)的關(guān)系
@ToMany:定義與多個實體對象的關(guān)系
當(dāng)我們編寫好實體類并添加自己需要的注解之后,點擊Make Project或者M(jìn)ake Module 'app',就會項目的build目錄下或者自己設(shè)定的目錄下看到生成的三個類文件:
- DaoMaster
- DaoSession
- UserDao
后面的數(shù)據(jù)庫操作需要借助這三個類來進(jìn)行,同時在我們的實體類中自動生成了各個屬性的get、set方法。
初始化GreenDao
一般建議在Application中初始化數(shù)據(jù)庫
DevOpenHelper有兩個重載方法:
- DevOpenHelper(Context context,String name)
- DevOpenHelper(Context context,String name,CursorFactory factory)
context上下文這個不用多說,name數(shù)據(jù)庫的名字,cursorFactory游標(biāo)工廠,一般不用,傳入null或者使用兩個參數(shù)的方法即可。我們對外提供一個getDaoSession()的方法供外部使用。
增
注意:Long型id,如果傳入null,則GreenDao會默認(rèn)設(shè)置自增長的值。
- insert(User entity):插入一條記錄
刪
- deleteBykey(Long key) :根據(jù)主鍵刪除一條記錄。
- delete(User entity) :根據(jù)實體類刪除一條記錄,一般結(jié)合查詢方法,查詢出一條記錄之后刪除。
- deleteAll(): 刪除所有記錄。
改
update(User entity):更新一條記錄
查
- loadAll():查詢所有記錄
- load(Long key):根據(jù)主鍵查詢一條記錄
- queryBuilder().list():返回:List
- queryBuilder().where(UserDao.Properties.Name.eq("")).list():返回:List
- queryRaw(String where,String selectionArg):返回:List
總結(jié)
至此,GreenDao的基本使用方法就這些了,后面還有一些關(guān)于數(shù)據(jù)的升級等問題,后面再具體介紹。
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
相關(guān)文章
Android中BroadcastReceiver實現(xiàn)短信關(guān)鍵字自動回復(fù)功能
實現(xiàn)手機(jī)短信監(jiān)聽的方式有兩種:一是通過ContentObserver觀察者實現(xiàn)監(jiān)聽,另一種就是通過廣播即BroadcastReceiver實現(xiàn)短信監(jiān)聽,文章中通過使用BroadcastReceiver實現(xiàn)有新短信的及時監(jiān)聽及包含設(shè)定的關(guān)鍵字時自動回復(fù)2018-06-06Android虛擬導(dǎo)航欄遮擋底部的輸入框的解決方法
下面小編就為大家分享一篇Android虛擬導(dǎo)航欄遮擋底部的輸入框的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01Android實現(xiàn)擴(kuò)大View點擊區(qū)域的三種方式
在 Android 應(yīng)用開發(fā)中,有時候需要擴(kuò)大 View 的點擊區(qū)域以提高用戶交互的便利性,尤其是當(dāng)視圖元素較小或用戶界面密集時,以下提供幾種擴(kuò)大點擊區(qū)域的思路,感興趣的小伙伴跟著小編一起來看看吧2024-08-08Android基于Xposed修改微信運動步數(shù)實例
這篇文章主要介紹了Android基于Xposed修改微信運動步數(shù)實例,需要的朋友可以參考下2017-06-06Android8.1 源碼修改之插入SIM卡默認(rèn)啟用Volte功能
這篇文章主要介紹了Android8.1 源碼修改之插入SIM卡默認(rèn)啟用Volte功能,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-05-05如何正確實現(xiàn)Android啟動屏畫面的方法(避免白屏)
本篇文章主要介紹了如何正確實現(xiàn)Android啟動屏畫面的方法(避免白屏),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02Android?Choreographer源碼詳細(xì)分析
Choreographer的作用主要是配合Vsync,給上層App的渲染提供一個穩(wěn)定的Message處理的時機(jī),也就是Vsync到來的時候,系統(tǒng)通過對Vsync信號周期的調(diào)整,來控制每一幀繪制操作的時機(jī)2022-08-08