ORM應該不用多做解釋了,
而Android自己本身並沒有ORM的任何lib可用,
但有很多熱心的人做了third-party lib,像是OrmLite、greenDao,
本篇要講的是greenDao,
為什麼我使用greenDao呢?
其實網路上不少人在做OrmLite和greenDao的benchmark,
greenDao的performance真是一片倒,
也因此我選擇了greenDao,
不過說實在的,greenDao一開始的前置作業真是有點麻煩!
所以特地寫一篇來記錄!
1. Clone the repository
先把greenDao的repository clone下來,
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了)
接著只要按下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
select
update
delete
比原本的SQLiteOpenHelper好用太多了啊!
而Android自己本身並沒有ORM的任何lib可用,
但有很多熱心的人做了third-party lib,像是OrmLite、greenDao,
本篇要講的是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好用太多了啊!