24 September 2014
ORM應該不用多做解釋了,
而Android自己本身並沒有ORM的任何lib可用,
但有很多熱心的人做了third-party lib,像是OrmLitegreenDao
本篇要講的是greenDao,
為什麼我使用greenDao呢?
其實網路上不少人在做OrmLite和greenDao的benchmark
greenDao的performance真是一片倒,
也因此我選擇了greenDao,
不過說實在的,greenDao一開始的前置作業真是有點麻煩!
所以特地寫一篇來記錄!


1. Clone the repository

先把greenDao的repository clone下來,
git clone https://github.com/greenrobot/greenDAO.git


2. Download jar

這就是我說的,前置作業很麻煩!
有3個必要的jar檔,竟然沒有在repository中!
要自行去下載!不過用gradle和marven就不用自行去下載,
anyway我用的是eclipse,所以得去下載!
    1. freemaker.jar
    2. greendao-generator-1.3.0
    3. greendao-1.3.7.jar
前面兩個jar是為了build出dao而用的,
而後面第三個jar給我們app使用的!
在開始之前,先說明一下整體流程,
大致上分為兩個步驟,
    1. 產生 DAO files
    2. 把DAO files 加到自己的android project中


3. Generate DAO files

還記得第一步驟clone下來的repository嗎?
repository中有很多份中有很多個project,
我們只會用到DaoExampleGenerator,
首先先開啟你的eclipse,
點選【File】->【Import】->【General】->【Existing Projects into Workspace】->選擇【DaoExampleGenerator】project
import進來以後應該會很多error,
因為少了2個jar檔,就把【freemaker.jar】和【greendao-generator-1.3.0】import進來吧!

接著打開ExampleDaoGenerator這個class,
這隻java會幫你generate出4個files,
    1. DaoMaster
    2. DaoSession
    3. Model
    4. ModelDao
DAO就是用來負責db的一切操作, create table, insert, delete, query...etc.
model就單純是一個object而已!
這四個files都要加到我們的android project之中,

接著來說明一下ExampleDaoGenerator裡面在做什麼,(我把原本的code改成我的sample了)
public static void main(String[] args) throws Exception {
        // 第一個參數是db的版本,第二個是package名稱
        Schema schema = new Schema(1, "net.kenyang.dao");

        addNote(schema);

        // 產生上述說明的files
        new DaoGenerator().generateAll(schema, "../");
}

private static void addNote(Schema schema) {
        // 這裡可以想像就是增加一個table,有三個欄位,且都是not null
        Entity note = schema.addEntity("Note");
        note.addIdProperty();
        note.addStringProperty("title").notNull();
        note.addDateProperty("date").notNull();
        note.addIntProperty("category").notNull();

}


接著只要按下run以後,這些files就會被產生出來!
接著就把這些files搬移到你的android project當中,
請注意!!由於我們上面的schema是"net.kenyang.dao",
那麼你的android project中也要有這個package,並且把這些files放置在該package當中!


4. Insert, select, delete

完成上面的前置作業以後,在開始之前,
請記得把第二步驟下載的greendao-1.3.7.jar加到android project中,
接著就可以開始使用了!

insert
DevOpenHelper helper = new DevOpenHelper(this, "expense", null);
DaoMaster daoMaster = new DaoMaster(helper.getWritableDatabase());
DaoSession daoSession = daoMaster.newSession();

NoteDao noteDao = session.getNoteDao();
Note note = new Note(null, "hello", new Date(), 0);
noteDao.insert(note);

select
QueryBuilder<Note> query = noteDao.queryBuilder();
// 查詢如果日期小於今天,並且照日期排序
query.where(Properties.Date.le(calendar.getTime())).orderDesc(Properties.Date);
for (Note n : query.list()) {
Log.e("ken", n.getTitle());
}

update
public void fnUpdate(long id) {
        Note note = noteDao.load(id);
        note.setTitle("change title");
        noteDao.update(note);
}

delete
public void fnDelete(long id) {
        noteDao.deleteByKey(id);
}


比原本的SQLiteOpenHelper好用太多了啊!

















blog comments powered by Disqus