我們項(xiàng)目還在用xutil的DB社露, 感覺(jué)太low了扁瓢, 所以換成greenDAO忽匈,下面簡(jiǎn)單記錄下使用步驟种蘸。
-
配置Gradle
1-1. 工程目錄下build.gradle
添加GreenDao插件支持
···
buildscript {repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0' // 添加插件 更好支持GreenDao
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
···
1-2. 項(xiàng)目下的build.gradle
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // 添加應(yīng)用依賴(lài)插件
android {
// 省略?xún)?nèi)容.....
}
greendao {
//數(shù)據(jù)庫(kù)的schema版本,也可以理解為數(shù)據(jù)庫(kù)版本號(hào). 如果更改了實(shí)體/數(shù)據(jù)庫(kù)模式媚创,則必須增加該值渗钉。默認(rèn)為1
schemaVersion 1
//生成DaoMaster、DaoSession钞钙、Dao的包名鳄橘,也就是要放置這些類(lèi)的包的全路徑。
daoPackage 'com.itkluo.greendaodemo.greendao'
//生成DaoMaster芒炼、DaoSession瘫怜、Dao的目錄, 默認(rèn)為構(gòu)建目錄 (build/generated/source/greendao)
targetGenDir 'src/main/java'
// generateTests false //設(shè)置為true以自動(dòng)生成單元測(cè)試
// targetGenDirTests //存儲(chǔ)生成的單元測(cè)試的基本目錄。默認(rèn)為 src/androidTest/java本刽。
}
dependencies {
compile 'org.greenrobot:greendao:3.2.0' //添加庫(kù)文件
// 省略?xún)?nèi)容.....
}
好了鲸湃, greenDao的基本配置就完成了, 接下來(lái)實(shí)際去感受下greenDao的強(qiáng)大方便吧~
- 開(kāi)始愉快的使用吧
2-1.首先編寫(xiě)一個(gè)實(shí)體類(lèi)
可以理解為實(shí)體類(lèi)和表就是一種映射
···
@Entity
public class UserInfo implements Serializable {
private static final long serialVersionUID = 6299300192544739072L;
// @Id(autoincrement = true)
// public Long id;
@Id
public Long user_id;
public String username;
public String mobile;
@Transient
public int loginCount;
}
···
就定義了一個(gè)UserInfo 對(duì)象盅安, 還多了幾個(gè)注解@Entity唤锉,@Id以及@Transient
@Entity注解 讓greenDao根據(jù)實(shí)體類(lèi)去生成相應(yīng)的Dao世囊, 就相當(dāng)于實(shí)體類(lèi)和表做了映射關(guān)聯(lián)
@Id注解 選擇long / Long屬性作為實(shí)體ID别瞭。相當(dāng)表里的ID是同個(gè)概念≈旰叮可設(shè)置數(shù)autoincrement ID值不斷增加的標(biāo)志自增長(zhǎng)不重復(fù)蝙寨, 獲取自己生成一個(gè)唯一id, 如上以u(píng)ser_id為主鍵
@Transient注解 標(biāo)記的字段不會(huì)作為表字段晒衩, 可以作為實(shí)體類(lèi)中臨時(shí)用的字段
編譯項(xiàng)目,生成Dao相關(guān)文件~
編譯之后發(fā)現(xiàn)多了一下代碼
這里生成的就是上面我們配置的路徑
2-2 寫(xiě)代碼使用
獲得UserInfoDao墙歪,對(duì)于剛建立的表關(guān)系听系, 就是通過(guò)這個(gè)UserInfoDao去做操作
···
DaoMaster.DevOpenHelper mDevOpenHelper = new DaoMaster.DevOpenHelper(context, demo.db);
DaoMaster mDaoMaster = new DaoMaster(helper.getWritableDatabase());
DaoSession mDaoSession= getDaoMaster(context).newSession();
UserInfoDao mUserInfoDao=mDaoSession.getUserInfoDao();
···
增加數(shù)據(jù)
···
public void addUserInfo(final UserInfo userInfo) {
if (mUserInfoDao != null) {
if (userInfo != null) {
long result = mUserInfoDao.insertOrReplace(userInfo);
LogUtil.d(TAG, "userInfo result: " + result);
}
}
}
···
查詢(xún)數(shù)據(jù)
···
public UserInfo getUserInfoByID(long myUserId) {
try {
if (mUserInfoDao != null) {
return mUserInfoDao.queryBuilder().where(UserInfoDao.Properties.User_id.eq(myUserId)).build().unique();
} else {
return null;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
···
刪除數(shù)據(jù)
···
public void deleteAllUserInfo(final long myUserId) {
if (mUserInfoDao != null) {
mUserInfoDao.deleteByKey(myUserId);
}
}
···
好了, 就記錄一些簡(jiǎn)單的操作虹菲, 還有排序靠胜,分頁(yè)等表操作可查看api。
具體看示例demo中把創(chuàng)建DAO毕源, 異步查詢(xún)和返回做了封裝浪漠,還可修改DB存儲(chǔ)路徑, 數(shù)據(jù)的升級(jí)遷移