GreenDao數據庫集成

前言

最近的項目需要使用到數據庫,本來想用Sqlite數據來做的,但是聽同事說使用Greendao數據庫是真的好用,我就半信半疑的去網上找了下greendao數據庫的資料,以及簡單的使用之后,徹底把我征服了。其實寫數據庫最繁瑣的還是sql語言,而對于我這樣的數據庫小白都可以輕松的使用,實在是太好用了。使用greendao之前我們需要了解的:

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

GreenDao的ORM

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


與主流數據庫對比

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

1:存取速度快

2:支持數據庫加密

3:輕量級

4:激活實體

5:支持緩存

6:代碼自動

接入greendao到項目

1:需要在項目(Project)的build.gradle中加入依賴:

buildscript {

repositories {

jcenter()

}

dependencies {

classpath'com.android.tools.build:gradle:2.3.1'

// NOTE: Do not place your application dependencies here; they belong

// in the individual module build.gradle files

//GreenDao3.2依賴

classpath'org.greenrobot:greendao-gradle-plugin:3.2.1'

}

}

2:在Moudle的build.gradle文件中添加依賴:

//使用greendao

applyplugin:'org.greenrobot.greendao'

添加依賴(dependencies)中:

//greendao3.2的依賴

compile'org.greenrobot:greendao:3.2.0'

3:添加greendao的數據庫配置:

greendao {

schemaVersion 1 ?//數據庫版本號 每次升級數據庫都需要改變版本,只能增加

daoPackage ?'com.pacgename.greendao.gen' ? //設置DaoMaster、DaoSession、Dao包名

targetGenDir ?'src/main/java' ? ?//設置DaoMaster、DaoSession、Dao目錄

//targetGenDirTest:設置生成單元測試目錄

//generateTests:設置自動生成單元測試用例

}

使用GreenDao數據庫

一:創建Entity類(相當于開發中的Bean類)

Entity類


Build自動生成需要代碼


自動生成GreenDao

greendao采用注解來創建Entity類,創建完成之后build自己的Moudlle,會自動生成:

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

2:DaoMaster、DaoSession、DAOS類 ?這里的類生成我們在Moudle的build.gradle中設置的

daoPackage路徑

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

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

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

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

@NotNull:屬性不能為空

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

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

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

二:創建數據庫和表,初始化數據庫:

public class MyApplication extends Application {

public static ? ?DaoSession ?daoSession;

@Override

public voidonCreate() {

super.onCreate();

setupDatabase();

}

/**

*配置數據庫

*/

private voidsetupDatabase() {

//創建數據庫book.db"

?DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "book.db", null);

//獲取可寫數據庫

SQLiteDatabase db = helper.getWritableDatabase();

//獲取數據庫對象

DaoMaster daoMaster =newDaoMaster(db);

//獲取Dao對象管理者

daoSession= daoMaster.newSession();

}

public staticDaoSessiongetDaoInstant() {

returndaoSession;

}

}

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

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

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

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

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

ShopDao dao = daoSession.getBookDao();

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

數據庫和表都已經建好了,我們就只需要去操作數據庫了:

三:greendao數據庫的基本操作(增,刪,改,查)

直接附上代碼:


BookDaobookDao;

@Override

protected voidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

findViewById(R.id.query_user).setOnClickListener(this);

findViewById(R.id.insert_user).setOnClickListener(this);

findViewById(R.id.delete_user).setOnClickListener(this);

BookDao bookDao = MyApplication.getDaoInstant().getBookDao();

}

@Override

public voidonClick(View v) {

switch(v.getId()) {

caseR.id.insert_user:

//插入數據 單個的Book對象

bookDao.insertOrReplace(newBook((long)1,"西游記",20,10));

//插入一個List數組? 只要是Iterable的子類都可以插入

List mBookList =newArrayList<>();

mBookList.add(newBook((long)2,"紅樓夢",30,5));

mBookList.add(newBook((long)3,"水滸傳",20,10));

mBookList.add(newBook((long)4,"三國演義",20,10));

mBookList.add(newBook((long)5,"紅樓夢",20,15));

mBookList.add(newBook((long)6,"紅樓西游",20,15));

bookDao.insertOrReplaceInTx(mBookList);

break;

caseR.id.query_user:

//根據查詢Bookname查詢出來,并且更具id排序,最后返回list數組

List books =bookDao.queryBuilder().

where(BookDao.Properties.Bookname.eq("紅樓夢")).

orderDesc(BookDao.Properties.Id).list();

//查詢所有的數據

List list =bookDao.queryBuilder().list();

break;

caseR.id.delete_user:

//根據id刪除數據

bookDao.deleteByKey((long)1);

break;

caseR.id.update_user:

//其實插入可以使用插入InsertorReplace來更新數據? 根據id更新

bookDao.update(newBook((long)1,"西游記",10,20));

break;

}

}

四:greendao數據庫的混淆

在進行打包發布時候,不能混淆掉greendao的類以及數據,在混淆文件中加入下列代碼:

#greendao3.2.0,此是針對3.2.0,如果是之前的,可能需要更換下包名-keepclassorg.greenrobot.greendao.**{*;}

-keepclassmembersclass*extendsorg.greenrobot.greendao.AbstractDao{publicstaticjava.lang.String TABLENAME;

}

-keepclass**$Properties

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

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

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,993評論 19 139
  • 一、關于greenDAO greenDAO應該算是當前最火的數據庫開源框架了,它是一個將對象映射到SQLite數據...
    當幸福來敲門58閱讀 13,912評論 3 19
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,779評論 18 399
  • GreenDao 介紹:greenDAO是一個對象關系映射(ORM)的框架,能夠提供一個接口通過操作對象的方式去操...
    小董666閱讀 747評論 0 1
  • 序言 (寫分享前的序言)大家好.很高興能為大家分享Android之GreenDao筆記,也希望能和大家一起學習進步...
    王黎聰閱讀 1,112評論 4 11