愛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