GreenDao 3.2.0 的基本使用

前言

Android開發中我們或多或少都會接觸到數據庫。Android中提供了一個占用內存極小的關系型數據庫-SQLite。雖然Android系統中提供了許多操作SQLite的API,但是我們還是需要手動去編寫SQL語句,這經常會出現一些莫名其妙的問題(??,不要問我為什么)。所以便出現了許多ORM(對象關系映射)框架。其中比較著名的有GreenDao、OrmLite、Litepal等。下面主要介紹一下GreenDao,我平時用的最多的也是GreenDao。

GreenDao簡介

offical.png

官網上的介紹,greenDAO 是一個將對象映射到 SQLite 數據庫中的輕量且快速的 ORM 解決方案。(greenDAO is a light & fast ORM solution that maps objects to SQLite databases.)

GreenDao特點

  • 性能最大化,可能是Android平臺上最快的ORM框架
  • 易于使用的API
  • 最小的內存開銷
  • 依賴體積小
  • 支持數據庫加密
  • 強大的社區支持

GreenDao有如此多的有點,我們還有什么理由不去使用它呢。

GreenDao配置

(1) 在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'
 }

(2)或者在build.gradle(Project:app)下面添加如下代碼:

buildscript { 
      repositories {
             mavenCentral()
      }
      dependencies {
              classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1' 
       }
 }

同時在build.gradle(Module:app)中添加下面代碼:

 apply plugin: 'org.greenrobot.greendao'

 dependencies {
         compile 'org.greenrobot:greendao:3.2.0'
 }

其他配置

build.gradle(Module:app)中添加:

greendao {   
        schemaVersion 1//數據庫版本號    
        daoPackage 'com.com.sky.downloader.greendao'//設置DaoMaster、DaoSession、Dao包名    
        targetGenDir 'src/main/java'//設置DaoMaster、DaoSession、Dao目錄   
        //targetGenDirTest:設置生成單元測試目錄    
       //generateTests:設置自動生成單元測試用例
}
custom.png

上述配置是可選項,如果不配置,則默認生成在build下:


default.png

GreenDao的基本配置就已經完成了,下面我們編寫一個實體類。

實體類User

  @Entity
  public class User {   
        @Id(autoincrement = true)   
        private Long id;   
        private String name;   
        private int age;
}

相關注解說明:

  • 實體@Entity注解

schema:告知GreenDao當前實體屬于哪個schema
active:標記一個實體處于活躍狀態,活動實體有更新、刪除和刷新方法
nameInDb:在數據庫中使用的別名,默認使用的是實體的類名
indexes:定義索引,可以跨越多個列
createInDb:標記創建數據庫表

  • 基礎屬性注解

@Id:主鍵 Long 型,可以通過@Id(autoincrement = true)設置自增長
@Property:設置一個非默認關系映射所對應的列名,默認是使用字段名,例如:@Property(nameInDb = "name")
@NotNull:設置數據庫表當前列不能為空
@Transient:添加此標記后不會生成數據庫表的列

  • 索引注解

@Index:使用@Index作為一個屬性來創建一個索引,通過name設置索引別名,也可以通過unique給索引添加約束
@Unique:向數據庫添加了一個唯一的約束

  • 關系注解

@ToOne:定義與另一個實體(一個實體對象)的關系
@ToMany:定義與多個實體對象的關系

當我們編寫好實體類并添加自己需要的注解之后,點擊Make Project或者Make Module 'app',就會項目的build目錄下或者自己設定的目錄下看到生成的三個類文件:

  • DaoMaster
  • DaoSession
  • UserDao

后面的數據庫操作需要借助這三個類來進行,同時在我們的實體類中自動生成了各個屬性的getset方法。

build.png

初始化GreenDao

一般建議在Application中初始化數據庫

initial database.png

DevOpenHelper有兩個重載方法:

  • DevOpenHelper(Context context,String name)
  • DevOpenHelper(Context context,String name,CursorFactory factory)
    context上下文這個不用多說,name數據庫的名字,cursorFactory游標工廠,一般不用,傳入null或者使用兩個參數的方法即可。我們對外提供一個getDaoSession()的方法供外部使用。

注意:Long型id,如果傳入null,則GreenDao會默認設置自增長的值。

  • insert(User entity):插入一條記錄


    add user.png

  • deleteBykey(Long key) :根據主鍵刪除一條記錄。
  • delete(User entity) :根據實體類刪除一條記錄,一般結合查詢方法,查詢出一條記錄之后刪除。
  • deleteAll(): 刪除所有記錄。


    delete.png

  • update(User entity):更新一條記錄


    update.png

  • loadAll():查詢所有記錄
  • load(Long key):根據主鍵查詢一條記錄
  • queryBuilder().list():返回:List<User>列表
  • queryBuilder().where(UserDao.Properties.Name.eq("")).list():返回:List<User>列表
  • queryRaw(String where,String selectionArg):返回:List<User>列表


    query.png

總結

至此,GreenDao的基本使用方法就這些了,后面還有一些關于數據的升級等問題,后面再具體介紹。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容