GreenDao 使用

目錄結(jié)構(gòu):

  1. 關(guān)于GreenDao

  2. 集成步驟

2.1 下載配置 [GREENDAO GENERATOR]

2.2 定義表的結(jié)構(gòu)

2.3 生成工程

  1. 如何使用

3.1 配置gradle

3.2 Coding

  1. Demo

  2. 最后


正文:

1. 關(guān)于GreenDao

DAO CODE GENERATION PROJECT

更詳細(xì)描述信息可以到[官網(wǎng)]查看

2. 集成步驟

2.1 下載配置 [GREENDAO GENERATOR]

首先,打開(kāi)一個(gè)需要集成的工程。為了演示需要,我在這里創(chuàng)建了一個(gè)新的工程:

Application name可以隨意起

好了,一個(gè)干凈的工程創(chuàng)建完成。我們來(lái)看看,greenDao更新到哪個(gè)版本了:
這個(gè)是官方的Git Repo【傳送門(mén)】,這里有demo和generator等工程。
回到剛才創(chuàng)建的那個(gè)新工程,這里面先創(chuàng)建一個(gè)目錄,用來(lái)存放GreenDao生成的文件:

切換成Projects模式,才能看到這個(gè)紅色框起來(lái)的選項(xiàng)。

完成之后,我們接下來(lái)的操作。
以模塊方式引用Generator

創(chuàng)建一個(gè)新的模塊

空的java library

這里工程名,我寫(xiě)的是GreenDaoLib。

創(chuàng)建完成了。再配置工程里的 build.gradle,添加 dependencies.
因?yàn)間enerator最新的版本是2.2.0(剛才的官方Git Repo地址打開(kāi)可以看到)

我們將
compile 'org.greenrobot:greendao-generator:2.2.0'
添加到剛才java library那個(gè)工程的build.gradle中:

compile 'org.greenrobot:greendao-generator:2.2.0'

到這里,我們的配置工作已經(jīng)完成一半了,現(xiàn)在需要去定義一下數(shù)據(jù)庫(kù)的基本信息,
而這個(gè)信息,需要根據(jù)項(xiàng)目使用的數(shù)據(jù)項(xiàng)有關(guān)。實(shí)際上,generator是將對(duì)象翻譯成一個(gè)一套接口的這么個(gè)工具,那么我們現(xiàn)在需要去編寫(xiě)相應(yīng)的java 對(duì)象。

2.2 定義表的結(jié)構(gòu)

這里分三步:

  • 首先:
    我們需要?jiǎng)?chuàng)建一個(gè)Schema,
  • 然后:
package com.example;
import de.greenrobot.daogenerator.DaoGenerator;
import de.greenrobot.daogenerator.Entity;
import de.greenrobot.daogenerator.Schema;
public class DemoGenerator {    
public static void main(String[] args) throws Exception {        
//step 1:        
    Schema schema = new Schema(100, "charles.nocompany.greendao");        
//step 2:        
    addTest(schema);        
//step 3:        
    new DaoGenerator().generateAll(schema,"./app/src/main/java-gen");    
}    

private static void addTest(Schema schema) {        
      Entity testTable = schema.addEntity("TestTable");        
      testTable.addIdProperty().primaryKey().autoincrement();
      testTable.addStringProperty("text").notNull();        
      testTable.addStringProperty("comment");        
      testTable.addDateProperty("date");    
}}
  • 最后:
    設(shè)置一下輸出的路徑(剛才我們?cè)趈ava的同級(jí)目錄下創(chuàng)建了一個(gè)java-gen的目錄,
    那么這里的generateAll的第二參數(shù)就設(shè)置到那里去"./app/src/main/java-gen")

2.3 生成工程

可以看到,我們將OutPut 設(shè)置到之前那個(gè)Java-gen的目錄下:
newDaoGenerator().generateAll(schema,"./app/src/main/java-gen");
最后會(huì)在我們?cè)O(shè)置的output目錄下生成:
DaoMaster、DaoSession、TestTableDao、TestTable
4個(gè)文件


這幾個(gè)類(lèi),就是我們將在工程中使用的東西。
問(wèn):如果一個(gè)項(xiàng)目中有個(gè)表,怎么辦?
答:再創(chuàng)建一個(gè)addXXX的函數(shù)如addTest那樣,定義屬性,重新生成一次。

3.如何使用

3.1配置gradle

首先,回到我們之前創(chuàng)建的那個(gè)Demo工程
設(shè)置一下build.gradle文件
需要修改sourceset 和dependencies

apply plugin: 'com.android.application'android {    

compileSdkVersion 24    
buildToolsVersion "23.0.3"    

   defaultConfig {        
    applicationId "com.nocompany.touc.demogreendao"        
    minSdkVersion 22        
    targetSdkVersion 24       
     versionCode 1        
    versionName "1.0"    
}    

  buildTypes {        
    release {            
    minifyEnabled false            
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'       
   }    
}    

sourceSets {        
   main {            
    java.srcDirs = ['src/main/java', 'src/main/java-gen']        
  }    
}
}

dependencies {    
  compile fileTree(dir: 'libs', include: ['*.jar'])    
  testCompile 'junit:junit:4.12'    
  compile 'com.android.support:appcompat-v7:24.0.0'    
  compile 'org.greenrobot:greendao:2.2.1'
}

3.2 Coding

好了,所有準(zhǔn)備工作都做好了,現(xiàn)在開(kāi)始使用GreenDao了。

1. 編寫(xiě)Actitvity&XML文件

這里需要三個(gè)文件,一個(gè)用來(lái)顯示的Activity,和兩個(gè)XML文件。

Paste_Image.png
Paste_Image.png

2. 數(shù)據(jù)庫(kù)部分代碼:

private void setupDatabase() {    
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "testTable_db", null);    
  db = helper.getWritableDatabase();   
  daoMaster = new DaoMaster(db);    
  daoSession = daoMaster.newSession();
}

3.增、刪、改、查

String str=inputEditText.getText().toString().trim();
String comment="comment";
TestTable table1= new TestTable(null,str,comment,new Date());
daoSession.getTestTableDao().insert(table1);
DeleteQuery deleteQuery=daoSession.getTestTableDao().queryBuilder() 
                        .where(TestTableDao.Properties.Id.gt(0))
                        .buildDelete();
deleteQuery.executeDeleteWithoutDetachingEntities();
String comment="comment2";
String str=inputEditText.getText().toString().trim();
Query query = daoSession.getTestTableDao().queryBuilder()
                    .where(TestTableDao.Properties.Text.eq(str))        
                    .orderAsc(TestTableDao.Properties.Date)        
                    .build();
List<TestTable> list = query.list();
TestTable table1 = list.get(0);
table1.setComment(comment);
daoSession.getTestTableDao().update(table1);
Query query = daoSession.getTestTableDao().queryBuilder() 
                        .where(TestTableDao.Properties.Text.eq(str))
                        .orderAsc(TestTableDao.Properties.Date) 
                        .build();
List<testTable> list = query.list();

4.Demo

GIF.gif

5.最后

官方介紹:http://greenrobot.org/greendao/documentation//introduction/
官方repo:https://github.com/greenrobot/greenDAO

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 我相信,在平時(shí)的開(kāi)發(fā)過(guò)程中,大家一定會(huì)或多或少地接觸到SQLite。然而在使用它時(shí),我們往往需要做許多額外的...
    勤奮的pangdunhu閱讀 2,171評(píng)論 1 11
  • 一、Greendao簡(jiǎn)介 Greendao是一款用于數(shù)據(jù)庫(kù)創(chuàng)建與管理的框架,由于原生SQLite語(yǔ)言比較復(fù)雜繁瑣...
    王培921223閱讀 807評(píng)論 1 1
  • GreenDao GreenDao是一個(gè)高效的數(shù)據(jù)庫(kù)訪問(wèn)ORM框架,節(jié)省了自己編寫(xiě)SQL的時(shí)間,快速的增刪查改等操...
    DorisSunny閱讀 22,910評(píng)論 4 20
  • 前言 在平時(shí)的開(kāi)發(fā)過(guò)程中,大家一定會(huì)或多或少地接觸到 SQLite。然而在使用它時(shí),我們往往需要做許多額外的工作,...
    hongzhenw閱讀 1,022評(píng)論 0 3
  • 在Android開(kāi)發(fā)過(guò)程中,有時(shí)候我們需要使用SQLite數(shù)據(jù)庫(kù)去本地存儲(chǔ)一些臨時(shí)文件,之前,我們的做法是通過(guò)SQ...
    耀東wang閱讀 79,867評(píng)論 14 48

友情鏈接更多精彩內(nèi)容