GreenDao入坑指南

heinika1476775901521發表於2017-12-14

愛GreenRobot就用GreenDao

之所以寫這篇文章,是為了紀念我踩過的坑:sob::angry:

Home page, documentation, and support links: http://greenrobot.org/greendao/

hithub:https://github.com/greenrobot/greenDAO

那麼為什麼要用GreenDao呢?

greenDAO is a light & fast ORM solution for Android that maps objects to SQLite databases. Being highly optimized for Android, greenDAO offers great performance and consumes minimal memory.

greenDAO Android是一個輕&快ORM解決方案,將物件對映到SQLite資料庫。對Android資料庫高度優化,greenDAO提供強大效能和對記憶體最小的消耗。

我選擇相信GreenRoBot這個作者,使用這個輕量級的框架。理由是EventBus同樣出自他手,並且從07年就開始從事android開發。

英文好的同學可以去官方網站上閱讀了,如果有問題再來看看我這篇文章,說不定可以幫上你。

本人使用的是androidstudio,eclipse的同學還望早點棄坑。

幫你生成Dao

沒錯!!!你不用寫Dao,他們會自動生成。

1,在main下建立目錄:java-gen。用來存放生成的Dao,必須建立,否則會報錯。

建立位置

2, 新建java工程:new moduel >> Java Library

3,修改bulid.gradle如下

apply plugin: 'java'

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'de.greenrobot:greendao-generator:2.1.0'
}
複製程式碼

4,新建一個類,類名只要不叫DaoGenerator就行了。。。

public class DaoGen {
    public static void main(String[] args) throws Exception {
        // 正如你所見的,你建立了一個用於新增實體(Entity)的模式(Schema)物件。
        // 兩個引數分別代表:資料庫版本號與自動生成程式碼的包路徑。
        Schema schema = new Schema(1,"com.example.chenlijin.greendao");
		//      當然,如果你願意,你也可以分別指定生成的 Bean 與 DAO 類所在的目錄,只要如下所示:
		//      Schema schema = new Schema(1, "com.example.chenlijin.bean");
		//      schema.setDefaultJavaPackageDao("com.example.chenlijin.greendao.dao");

        // 模式(Schema)同時也擁有兩個預設的 flags,分別用來標示 entity 是否是 activie 以及是否使用 keep sections。
        // schema2.enableActiveEntitiesByDefault();
        // schema2.enableKeepSectionsByDefault();
        // 一旦你擁有了一個 Schema 物件後,你便可以使用它新增實體(Entities)了。
        addNote(schema);
        // 最後我們將使用 DAOGenerator 類的 generateAll() 方法自動生成程式碼,此處你需要根據自己的情況更改輸出目錄(既之前建立的 java-gen)。
        // 其實,輸出目錄的路徑可以在 build.gradle 中設定,有興趣的朋友可以自行搜尋,這裡就不再詳解。
        new DaoGenerator().generateAll(schema, "app/src/main/java-gen");
    }

    /**
     * @param schema
     */
    private static void addNote(Schema schema) {
        // 一個實體(類)就關聯到資料庫中的一張表,此處表名為「Note」(既類名)
        Entity note = schema.addEntity("Note");
        // 你也可以重新給表命名
        // note.setTableName("NODE");
        // greenDAO 會自動根據實體類的屬性值來建立表欄位,並賦予預設值
        // 接下來你便可以設定表中的欄位:
        note.addIdProperty();
        note.addStringProperty("text").notNull();
        // 與在 Java 中使用駝峰命名法不同,預設資料庫中的命名是使用大寫和下劃線來分割單詞的。
        // For example, a property called “creationDate” will become a database column “CREATION_DATE”.
        note.addStringProperty("comment");
        note.addDateProperty("date");
    }
}
複製程式碼

5,點選右鍵,執行:

執行

到此,Dao自動幫你生成了。

開始簡化版的資料庫體驗

在工程bulid.gradle中新增:

compile 'de.greenrobot:greendao:2.1.0'
複製程式碼

把生成的類copy到專案中.

如果不想手動copy:

step 1,修改gradle:

android {

    ....

    sourceSets {
        main {
            java.srcDirs = ['src/main/java', 'src/main/java-gen']
        }
    }
}
複製程式碼

step 2,

修改 DaoGenerator 中Schema的路徑到想要的路徑:

Schema schema = new Schema(1,"com.example.chenlijin.greendao");

完成,在執行一遍DaoGenerator,生成的類就會在指定目錄裡了.

接下來就可以進行資料庫的操作了:happy:

建立表

//建立資料庫
DaoMaster.DevOpenHelper db = new DaoMaster.DevOpenHelper(this, "notes-db", null);
複製程式碼

獲取Dao操作類

//獲取daomaster
mDaoMaster = new DaoMaster(db.getWritableDatabase());
//建立一個會話
mDaoSession = mDaoMaster.newSession();
//獲取NoteDao
mNoteDao = mDaoSession.getNoteDao();
複製程式碼

配置表和引數

private void addNote() {
    String noteText = edittextContent.getText().toString();
    edittextContent.setText("");
    final DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
    String comment = "新增於:" + df.format(new Date());
    //id可以為空
    Note note = new Note(null, noteText, comment, new Date());
    //Todo 新增
    mNoteDao.insert(note);
    Log.d("DaoExample", "Inserted new note, ID: " + note.getId());

}
複製程式碼

新增

cityInfoDao.insertInTx(result.getCityList());
複製程式碼

刪除

mNoteDao.delete(noteList.get(position));
複製程式碼

修改

cityInfoDao.updateInTx(result.getCityList());
複製程式碼

查詢

noteList = mNoteDao.queryBuilder().list();
複製程式碼

有關查詢的文件翻譯:http://blog.csdn.net/yuyuanhuang/article/details/42751469 有關查詢的官方文件:http://greenrobot.org/greendao/documentation/queries/ 基本用法就這些了,更多強大功能,請看官方文件.

樣例:https://github.com/heinika/GreemDaoSimple

相關文章