之前一直使用SQLite寫數(shù)據(jù)庫(kù)揭朝,前幾日用過GreenDao后队贱,相見恨晚。對(duì)比的感受就是潭袱,SQLite建表柱嫌,增刪改查都需要寫很多代碼,開發(fā)效率低下屯换,并且存取的效率也較低编丘,相比之下,GreenDao建表彤悔、使用都很方便嘉抓,且效率很高,插入和更新的速度都是SQLite的2倍晕窑,GreenDao本身不到100k抑片,占用內(nèi)存也很小。
接下來杨赤,我們就來看看敞斋,GreenDao到底如何使用。
首先疾牲,我們要在項(xiàng)目中集成該框架渺尘。在Project : build.gradle中添加倉(cāng)庫(kù)和插件。
buildscript {
repositories {
google()
jcenter()
mavenCentral() // 設(shè)置maven倉(cāng)庫(kù)
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.1'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // 增加GreenDao插件
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
然后在Module :build.gradle中增加依賴
apply plugin: 'org.greenrobot.greendao' // 應(yīng)用插件
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
//省略其他不相關(guān)依賴庫(kù)...
implementation 'org.greenrobot:greendao:3.2.2'// 添加依賴庫(kù)
implementation 'net.zetetic:android-database-sqlcipher:3.5.6'//加密庫(kù)依賴说敏,可選
}
繼續(xù)在Module :build.gradle中設(shè)置數(shù)據(jù)庫(kù)屬性
greendao {
schemaVersion 1 //數(shù)據(jù)庫(kù)版本號(hào)
daoPackage 'com.example.pax.printer.db.dao'// 設(shè)置DaoMaster鸥跟、DaoSession、Dao 包名
targetGenDir 'src/main/java'//設(shè)置DaoMaster盔沫、DaoSession医咨、Dao目錄
}
完成以上配置后,同步工程架诞。接下來拟淮,我們就開始具體使用GreenDao。先寫一個(gè)實(shí)體類谴忧,TransData.java
@Entity
public class TransData {
@Id
private Long id;
private String transType;
private String cardType;
private String amount;
private String traceNo;
private String dateTime;
//生成getter很泊、setter函數(shù),我這邊就省略了
}
這邊我們用到兩個(gè)注解沾谓,@Entity 表明這個(gè)實(shí)體類會(huì)在數(shù)據(jù)庫(kù)中生成一個(gè)與之相對(duì)應(yīng)的表委造,@Id 對(duì)應(yīng)數(shù)據(jù)表中的 Id 字段。
寫好實(shí)體類后均驶,我們編譯下工程昏兆,如果配置成功,就會(huì)在我們剛剛設(shè)置的目錄下生成這些文件:
在Application類中初始化GreenDao:
public class FinancialApplication extends MultiDexApplication{
private static FinancialApplication mApp;
private DaoSession daoSession;
@Override
public void onCreate() {
super.onCreate();
FinancialApplication.mApp = this;
initGreenDao();
}
public static FinancialApplication getApp() {
return mApp;
}
private void initGreenDao(){
DaoMaster.DevOpenHelper openHelper = new DaoMaster.DevOpenHelper(this, "trans_data.db");
SQLiteDatabase sqLiteDatabase = openHelper.getWritableDatabase();
DaoMaster master = new DaoMaster(sqLiteDatabase);
daoSession = master.newSession();
}
public DaoSession getDaoSession() {
return daoSession;
}
}
獲取TransDataDao:
DaoSession daoSession = FinancialApplication.getApp().getDaoSession();
private TransDataDao dataDao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_record);
dataDao = daoSession.getTransDataDao();
}
數(shù)據(jù)庫(kù)的增刪改查:
public void onSaveClick(View view){
TransData transData = new TransData();
transData.setDateTime(getDateTime());
transData.setTransType(transType.getText().toString());
transData.setAmount(amount.getText().toString());
transData.setCardType(cardType.getText().toString());
transData.setTraceNo(transNo.getText().toString());
if(recordId > 0){
transData.setId(recordId);
dataDao.update(transData);//更新數(shù)據(jù)妇穴,使用這個(gè)方法記得要傳id爬虱,不然會(huì)出錯(cuò)
}else {
dataDao.insertOrReplace(transData);//增加數(shù)據(jù)隶债,使用insert(T entity)也一樣的
}
}
public void onDelClick(View view){
dataDao.deleteByKey(recordId);//根據(jù)id刪除數(shù)據(jù),還有別的方法跑筝,可以自己試一試
}
private TransData getTransData(long id){
return dataDao.loadByRowId(id);//根據(jù)id查詢數(shù)據(jù)死讹,查詢?nèi)康脑捰胠oadAll()
}
到這里,GreenDao的基礎(chǔ)使用就介紹完啦曲梗。