主頁: https://github.com/greenrobot/greenDAOjava
配置: 添加如下依賴
* compile 'de.greenrobot:greendao:2.1.0'
* compile 'de.greenrobot:greendao-generator:2.1.0'android
優勢:
* 性能最大化,內存開銷最小化
* 易於使用的API
* 爲Android進行高度優化git
重要類
DaoMaster:它保存了sqlitedatebase對象以及操做DAO classes(注意:不是對象)。其提供了一些建立和刪除table的靜態方法,其內部類OpenHelper和DevOpenHelper實現了SQLiteOpenHelper並建立數據庫的框架。
DaoSession:會話層。操做具體的DAO對象(注意:是對象),好比各類getter方法。
XXXDao:實際生成的某某DAO類,一般對應具體的java類,好比NoteDao等。其有更多的權限和方法來操做數據庫元素。
XXXEntity:持久的實體對象。一般表明了一個數據庫row的標準java properties。
github
使用步驟sql
1.建立自定義的DAOGenerater,指定數據庫相關配置並生成相關類數據庫
import de.greenrobot.daogenerator.DaoGenerator; import de.greenrobot.daogenerator.Entity; import de.greenrobot.daogenerator.Schema; /** * Description:幫助生成操做數據的一些Java類 */ public class CustomHelper { public static void main(String[] args) throws Exception { //第一個參數表示數據庫版本號, //若是發生變動會致使數據庫更新的操做被調用(若是不修改生成的DaoMaster中的方法 //升級默認操做是刪除全部表並從新建表) //第二個參數是生成的DAO類的包路徑 Schema schema = new Schema(1, "com.itheima.greendao.db"); // 建立表,參數爲表名 Entity entity = schema.addEntity("Info"); // 爲表添加字段 entity.addIdProperty().primaryKey().autoincrement(); //自增加id爲主鍵 entity.addStringProperty("name").notNull();//非null字段 entity.addIntProperty("age");//Int類型字段 entity.addStringProperty("tel");// String類型字段 // 生成數據庫相關類 //第二個參數指定生成文件的本次存儲路徑,AndroidStudio工程指定到當前工程的java路徑 new DaoGenerator().generateAll(schema, "D:\\Android\\code-as\\Aandroid56\\DataBase\\greendao\\src\\main\\java"); } }
2.在Application中經過DaoMaster.DevOpenHelper初始化數據庫框架
// 該初始化過程最好放在Application中進行,避免建立多個Session private void setupDatabase() { // 經過 DaoMaster 的內部類 DevOpenHelper建立數據庫 // 注意:默認的 DaoMaster.DevOpenHelper 會在數據庫升級時,刪除全部的表 /** * @param context : Context * @param name : 數據庫名字 * @param factory : CursorFactroy */ DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "student.db", null); // 獲取數據庫 SQLiteDatabase database = helper.getWritableDatabase(); // 獲取DaoMaster DaoMaster daoMaster = new DaoMaster(database); // 獲取Session DaoSession daoSession = daoMaster.newSession(); // 獲取對應的表的DAO對象 InfoDao dao = daoSession.getInfoDao();}
3.獲取數據庫的DAO對象,便可進行增刪改查的操做ide
// 增 dao.insert(new Info(2l,"張三",18,"119")); // 刪 dao.deleteByKey(1L); // 改 dao.update(new Info(3L, "趙琦", 78, "18812348888")); // 查 QueryBuilder<Info> builder = dao.queryBuilder(); List<Info> build = builder.list(); for(Info info:build){ Log.e("MainActivity",info.toString()); }