之前,android的數據庫部分,自己一直傻傻地按照最原始的方式:寫一個類比如MyDbHelper去繼承SQLiteOpenHelper,然後建庫,建表,建字段,然後再創建一個類MyDbDao去實現操作數據庫的增刪改查的方法。
直到在博客上看到大牛寫的 LitePal 的使用,才發現原來數據庫部分可以這麼簡化。LitePal的詳細地使用可以參考 http://blog.csdn.net/guolin_blog/article/details/38083103 一共九篇,分析講解得很詳細。
後來,發現除了LitePal, 另一個開源的框架 greenDao。在github上比LitePal還要火。所以今天就整理一下greenDao的具體的使用。
greenDao的github下載地址:https://github.com/greenrobot/greenDAO
greenDao的官網:http://greendao-orm.com/
下面是官網給出的greenDao的一些特性
Object/relation mapping (ORM) (對象關係映射)
Performance (性能 高)
Slim library (資源庫小 不到100k)
Code generation (代碼生成)
…
快速入門
來看它給出的 DaoExample 示例
1. 創建表
new DaoMaster.DevOpenHelper(this, "notes.db", null);
這裏使用DaoMaster這個類可以很方便地獲得一個SQLiteOpenHelper,只需傳入數據庫的表名,就可以幫我們自動創建好數據庫了,省去了自己寫SQL語句。
2. 插入和刪除
- 預先準備好操作該數據庫的對象(noteDao)
daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
noteDao = daoSession.getNoteDao();
- 插入
Note note = new Note(null, noteText, comment, new Date());
noteDao.insert(note);
Log.d("DaoExample", "Inserted new note, ID: " + note.getId());
這裏只要創建一個Note對象,並在Dao調用插入方法時傳入就算完成了。而且,插入完成時,插入的note的數據庫id 就是 這個note對象的id。
- 刪除
noteDao.deleteByKey(id);
刪除操作也很直接,就這麼一句。
3. 數據模型 和 代碼生成
爲了創建實體更好的擴展note,我們看下DaoExampleGenerator這個示例,它只有一個類,裏面定義了數據模型:
Schema schema = new Schema(1, "de.greenrobot.daoexample");
Entity note= schema.addEntity("Note");
note.addIdProperty();
note.addStringProperty("text").notNull();
note.addStringProperty("comment");
note.addDateProperty("date");
new DaoGenerator().generateAll(schema, "../DaoExample/src-gen");
可以看出,創建的Schema對象,可以來添加實體,並且這個實體與數據庫的表有關聯,同時,一個實體包含多個屬性,這與數據庫的列名相互映射。
一旦schema完全定義完成,就可以觸發代碼生成了,前面的Note.java、noteDao.java 和 DaoMaster.java等文件就是這樣來的。
介紹
1. 基本概念
greenDAO 是android平臺的一個對象關係映射的工具。它爲關係型數據庫提供了一個面向對象的接口。像greenDao這樣的ORM工具,能爲我們提供很簡單的數據接口 並且 做很多重複的任務。
2. Dao編碼生成項目
要在android項目中使用greenDao,最好將自動生成的工程(普通的Java Project)放在一個獨立的文件夾中,目的是好與你本身的項目區分開來。
3. 核心類
一旦生成了代碼,就可以使用greenDao了,不要忘記在項目中引入greenDao的核心庫(greenDao.jar)。
下面是greenDao的幾個基本接口的核心類:
DaoMaster:裏面有靜態的方法來創建或刪除表。它是greenDao的入口,掌握這數據庫並管理着特定模式的DAO類。
DaoSession:管理着所有可以獲取到的特定模式的DAO對象,可以通過get方法獲取。DaoSession也提供了一些基本的實體增刪改查操作的持久化的方法。
DAOs:每一個實體,都會生成一個DAO,並且有更多的持久化的方法。
Entities:就像JavaBean,通常,是代表使用標準Java屬性的數據庫的一行。
4. 核心的初始化
helper = new DaoMaster.DevOpenHelper(this, "notes.db", null);
db = helper.getWritableDatabase();
daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
noteDao = daoSession.getNoteDao();
模型實體
1. Schema:
Schema schema = new Schema(1, "de.greenrobot.daoexample");
schema是你定義的第一個對象,參數1是schema的版本,參數2是默認的包名(實體、DAOs、Junit測試用的包名)。
也可以爲DAO 和 test類選擇不同的包名:
schema.setDefaultJavaPackageTest("de.greenrobot.daoexample.test");
schema.setDefaultJavaPackageDao("de.greenrobot.daoexample.dao");
2:Entities:
Entity user = schema.addEntity("User");
schema有了之後,就可以添加entities了,並且可以改變一些設置,最重要的是,可以增加一些屬性到實體上。
user.addIdProperty();
user.addStringProperty("name");
user.addStringProperty("password");
user.addIntProperty("yearOfBirth");
好了,這裏只是簡單地整理了一下greenDao的相關知識,不夠全面,大家可以去它的官網上仔細閱讀文檔。能做的demo驗證驗證就更好不過了。