? ? ? ? 最近一段時間通過對數(shù)據(jù)庫操作的新方法的學習,發(fā)現(xiàn)了一種操作簡單的框架,所以小弟在這里進行了一下簡單總結,希望能幫到其他開發(fā)學習者,接下來讓我們了解下這個框架,greenDAO是一個對象關系映射(ORM)的框架,能夠提供一個接口通過操作對象的方式去操作關系型數(shù)據(jù)庫,它能夠讓你操作數(shù)據(jù)庫時更簡單、更方便。
一,首先我們先了解下GreenDao優(yōu)點
1,性能高,號稱Android最快的關系型數(shù)據(jù)庫.
2,內存占用小.
3,庫文件比較小,小于100k.
4,支持數(shù)據(jù)庫加密greendao支持SQLCiPher.
5,簡潔易用的API.
二,總結一下GreenDao的使用方法。
1.首先我們在project的gradle文件中引入greenDAO插件,引入之后如下:

然后在module的gradle文件中添加greenDAO的插件,并引入相關類庫,修改之后的效果如下:

我們首先應該引入相關插件,然后在dependencies中引入greenDAO的類庫。至于greendao中,schemaVersion表示數(shù)據(jù)庫版本號,當我們的數(shù)據(jù)庫需要升級時我們修改這里的版本號即可(修改這里的版本號,greendao會自動修改生成到DAOMaster中的版本號),targetGenDir表示greenDAO生成的DAOMaster和DaoSession的位置。準備好后我們就已經(jīng)成功將greenDAO引入到我們的項目中了。
2.數(shù)據(jù)庫初始化
數(shù)據(jù)庫引入成功后,在使用時,我們需要構建一個實體類

@Entity表示這個實體類,點擊編譯按鈕后一會會在數(shù)據(jù)庫中生成對應的表,@Id表示該字段是Id,我們注意到該字段的數(shù)據(jù)類型為包裝類型Long,為什么要用包裝類型呢?因為插入數(shù)據(jù)時第一個參數(shù)是ID,如果為null,字段會自動增長。@Property則表示該屬性將作為表的一個字段,其中nameInDb是這個屬性在數(shù)據(jù)庫中對應的數(shù)據(jù)名稱。到這里,寫完這些之后將項目進行編譯,編譯成功之后系統(tǒng)會幫助我們生成相應的構造方法和get/set方法,并且還會在我們的包下生成DaoMaster和DaoSession(在這里提醒下所謂的編譯就是點擊下那個同步/編譯的按鈕,所有需要的類個方法就自動生成了,具體可參考小弟github上的小demo)。這里知識常用的注解,還有其他的注解需要的同學們可以自行查詢。
當我們把這一步做完之后,我們就可以進行數(shù)據(jù)庫的初始化了,具體操作如下:

首先獲取一個DevOpenHelper對象,這個類有點類似于我們使用的SqliteOpenHelper,我們主要在這個類中對數(shù)據(jù)庫的版本進行管理。我們對數(shù)據(jù)庫基本的初始化操作就完成了,玩過hibernate的小伙伴都知道,想要操作User實體類,得先有一個UserDao,這個UserDao要怎么獲取呢?在上圖中我們可以看到已經(jīng)獲取到了。
到現(xiàn)在這一步,基本準備工作我們已經(jīng)做完了,接下來我們就可以對數(shù)據(jù)庫進行操作了,哈哈哈

3.添加數(shù)據(jù)
數(shù)據(jù)庫的增刪改查我們都需要通過UserDao來操作,插入具體操作如下:

User的第一個參數(shù)為id,這里傳null的話在插入的過程中id字段會自動增長,第二個參數(shù)是username,每次插入時生成一個隨機數(shù),避免重復。
4.刪除數(shù)據(jù)
刪除數(shù)據(jù)和修改數(shù)據(jù)的思路一樣,都是要先查找到數(shù)據(jù):where表示查詢條件,這里我是查詢id小于等于9的數(shù)據(jù),where中的參數(shù)可以有多個,就是說可以添加多個查詢條件。最后的list表示查詢結果是一個List集合,如果你只想查詢一條數(shù)據(jù),最后unique即可。當然,我們也可以根據(jù)id來刪除數(shù)據(jù),具體操作如下:

5.修改數(shù)據(jù)
修改數(shù)據(jù)也是先查詢,再進行修改:

這里我添加了兩個查詢條件,一個是id要大于等于9,同是還要滿足username like %haha%,特別注意最后的unique表示只查詢一條數(shù)據(jù)出來即可。
6.查詢數(shù)據(jù)

其實上面刪除和修改都已經(jīng)涉及到查詢了,查詢里邊有許多非常好用的函數(shù),我這里舉兩個例子between表示查詢id介于1到15之間的數(shù)據(jù),limit表示查詢5條數(shù)據(jù)。
7.數(shù)據(jù)庫升級
數(shù)據(jù)庫的升級其實就兩個步驟我們來看看:
7.1修改gradle文件
首先在module的gradle文件中修改版本號:

7.2修改實體類

重新進行編譯即可修改成新的實體類。
一般的數(shù)據(jù)庫升級這樣就可以了,特殊情況可能需要自己編寫數(shù)據(jù)庫遷移腳本,這種時候可以自定義DBHelper,定義方式如下,注意繼承類:
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);
}
}
可以在onUpgrade方法中進行數(shù)據(jù)庫的更新修改,如果自定義了DBHelper,則數(shù)據(jù)庫的初始化變?yōu)槿缦路绞剑?/p>
DBHelper?devOpenHelper?=newDBHelper(this);
DaoMaster?daoMaster?=newDaoMaster(devOpenHelper.getWritableDb());
DaoSession?daoSession?=?daoMaster.newSession();
userDao?=?daoSession.getUserDao();
OK,這就是greenDAO數(shù)據(jù)庫框架的一個簡單學習過程。僅作為自己的一個學習記錄。
具體可參考小弟上傳到github上的demo:https://github.com/liuxinggithub/greendao.git
本文參考了網(wǎng)上資料,總結了一下使用方法,方便更多使用者的使用。