前言
Greendao是一款用于數(shù)據(jù)庫創(chuàng)建與管理的框架,由于原生SQLite語言比較復雜繁瑣,使得不少程序員不得不去學習SQLite原生語言,但是學習成本高,效率低下,所以不少公司致力于開發(fā)一款簡單的數(shù)據(jù)庫管理框架,較為著名的就有Greendao和ORMLite,但是就數(shù)據(jù)分析來看,Greendao的效率是高于ORMLite及其他框架的,是目前該行業(yè)的領先者。也因為Greendao的使用方法簡便,且效率高使得其成為目前使用最為廣泛的數(shù)據(jù)庫管理框架,這也是廣大程序員的福音。
優(yōu)點
- 存取速度快
- 支持數(shù)據(jù)庫加密
- 輕量級
- 激活實體
- 支持緩存
- 代碼自動生成
步驟

第一步 環(huán)境配置
在項目的build.gradle文件下進入如下配置 (注釋的地方就是要添加的東西)
buildscript {
repositories {
jcenter()
mavenCentral() // add repository
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.1'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
}
}
在App的build.gradle文件下進行如下配置 (注釋的地方就是要添加的東西)
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
greendao {
schemaVersion 1 //數(shù)據(jù)庫版本
targetGenDir 'src/main/java' //指定生成代碼的目錄
daoPackage //生成代碼到具體包下
}
dependencies {
implementation 'org.greenrobot:greendao:3.2.2' // add library
}
第二步 新建實體類用@Entity注解,實體類中的屬性即為數(shù)據(jù)庫中對應的字段,最后build項目即會生成相應的代碼
build之前實體類如下:
@Entity
public class HistoryData {
private String date;
private String history;
}
build之后實體類如下:
@Entity
public class HistoryData {
private String date;
private String history;
@Generated(hash = 895975915)
public HistoryData(String date, String history) {
this.date = date;
this.history = history;
}
@Generated(hash = 422767273)
public HistoryData() {
}
public String getDate() {
return this.date;
}
public void setDate(String date) {
this.date = date;
}
public String getHistory() {
return this.history;
}
public void setHistory(String history) {
this.history = history;
}
}
比build之前多了構造方法和set,get方法
另外自動生成了DaoMaster,DaoSession,HistoryDataDao三個類
注解解釋
@Entity:告訴GreenDao該對象為實體,只有被@Entity注釋的Bean類才能被dao類操作
@Id:對象的Id,使用Long類型作為EntityId,否則會報錯。(autoincrement = true)表示主鍵會自增,如果false就會使用舊值
@Property:可以自定義字段名,注意外鍵不能使用該屬性
@NotNull:屬性不能為空
@Transient:使用該注釋的屬性不會被存入數(shù)據(jù)庫的字段中
@Unique:該屬性值必須在數(shù)據(jù)庫中是唯一值
@Generated:編譯后自動生成的構造函數(shù)、方法等的注釋,提示構造函數(shù)、方法等不能被修改
第三步 創(chuàng)建數(shù)據(jù)庫
public class MyApplication extends Application{
private static MyApplication mApp;
private static DaoSession mDaoSession;
@Override
public void onCreate() {
super.onCreate();
mApp = this;
//配置數(shù)據(jù)庫
initGreenDao();
}
private void initGreenDao() {
//創(chuàng)建數(shù)據(jù)庫mydb.db
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(mApp,"mydb.db");
//獲取可寫數(shù)據(jù)庫
SQLiteDatabase database = helper.getWritableDatabase();
//獲取數(shù)據(jù)庫對象
DaoMaster daoMaster = new DaoMaster(database);
//獲取Dao對象管理者
mDaoSession = daoMaster.newSession();
}
public static DaoSession getmDaoSession(){
return mDaoSession;
}
}
可以發(fā)現(xiàn),GreenDao已經(jīng)將我們的數(shù)據(jù)庫創(chuàng)建縮成幾句話,代碼會自動將實體類對象創(chuàng)建成表,不再是傳統(tǒng)的手寫SQL語句。這里的數(shù)據(jù)庫創(chuàng)建只需要在MyApplication中執(zhí)行一次即可,這里對幾個類進行解釋
DevOpenHelper:創(chuàng)建SQLite數(shù)據(jù)庫的SQLiteOpenHelper的具體實現(xiàn)
DaoMaster:GreenDao的頂級對象,作為數(shù)據(jù)庫對象、用于創(chuàng)建表和刪除表
DaoSession:管理所有的Dao對象,Dao對象中存在著增刪改查等API
由于我們已經(jīng)創(chuàng)建好了DaoSession和HistoryData的實體類對象,編譯后會自動生成我們的HistoryDataDao對象,可通過DaoSession獲得
HistoryDataDao historyDataDao = daoSession.getHistoryDataDao();
這里的Dao(Data Access Object)是指數(shù)據(jù)訪問接口,即提供了數(shù)據(jù)庫操作一些API接口,可通過dao進行增刪改查操作
第四步 數(shù)據(jù)庫的增刪改查
后續(xù)更新...