使用GreenDao已經好久了,不知不覺已經更新到3.x版本了。
記錄一下使用基本方法:
1.先在app目錄下的main檔案夾下建立java-gen目錄:
註:一會的java檔案指定產生在這個目錄下, 當然這不是必須的,你可以自訂目錄,這樣做的目的是,目錄結構清晰等這那的。
2.在app下build.gradle中指定識別java-gen,順便倒入greendao依賴:
compile "org.greenrobot:greendao:3.2.2"
sourceSets { main { java.srcDirs = ['src/main/java', 'src/main/java-gen'] } }
3.建立java工程:
然後在java工程中倒入依賴:
compile 'org.greenrobot:greendao-generator:3.2.2'
4.在java工程中建立一個java類:GreenDaoGenerator,其中我建立了一個表後運行這個java類,
greendao會根據我們的設定和表建立的欄位,直接將需要的類產生到剛才我們指定的目錄下:
package com.example;import org.greenrobot.greendao.generator.DaoGenerator;import org.greenrobot.greendao.generator.Entity;import org.greenrobot.greendao.generator.Schema;/** * java工程產生資料庫表 */public class GreenDaoGenerator { public static void main(String[] args){ // 產生資料庫實體類xxentity 對應的是資料庫的表 Schema schema = new Schema(1, "com.school.entity"); addTestGroup(schema); schema.setDefaultJavaPackageDao("com.school.dao"); try { new DaoGenerator().generateAll(schema, "/Users/katsurayasubumi/StudioProjects/Reliable_TestInput/app/src/main/java-gen"); } catch (Exception e) { e.printStackTrace(); } } /** * 測試專案分組表 */ private static void addTestGroup(Schema schema){ Entity entity = schema.addEntity("TestGroup"); entity.addIdProperty(); entity.addIntProperty("group"); entity.addStringProperty("name"); }}
註:1.其中entity.addIdProperty();是給這張表建立一個主鍵,自增長的id。你也可以換成你實際需求中的唯一標識的”id“。
2.main函數中Schema在執行個體化的時候,第一個參數為資料庫版本號碼,第二個參數是產生對應表實體類的目錄。下面setDefal..是指定greendao產生的類的目錄。
上圖就是運行java工程之後,對應目錄下產生了對應的檔案。
5.接下來再來封裝一下資料庫操作類。
public class DaoManager { private static final String TAG = DaoManager.class.getSimpleName(); // 資料庫名稱 private static final String DB_NAME = "reliable.sqlite"; // 多線程訪問 private volatile static DaoManager manager; private static DaoMaster.DevOpenHelper helper; private static DaoMaster daoMaster; private static DaoSession daoSession; private Context context; /** * 使用單例模式獲得操作資料庫的對象 */ public static DaoManager getInstance(){ DaoManager instance = null; if (manager == null){ synchronized (DaoManager.class){ if (instance == null){ instance = new DaoManager(); manager = instance; } } } return manager; } public void init(Context context){ this.context = context; } /** * 判斷是否存在資料庫 * 如果沒有則建立資料庫 */ public DaoMaster getDaoMaster(){ if (daoMaster == null){// DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, DB_NAME, null); MyOpenHelper myOpenHelper = new MyOpenHelper(context, DB_NAME, null); daoMaster = new DaoMaster(myOpenHelper.getWritableDatabase()); } return daoMaster; } /** * 完成對資料庫的添加刪除修改查詢等的操作 * 註:僅僅是一個介面 */ public DaoSession getDaoSession(){ if (daoSession == null){ if (daoMaster == null){ daoMaster = getDaoMaster(); } daoSession = daoMaster.newSession(); } return daoSession; } /** * 開啟輸出日誌的操作 * 註:預設是關閉的 */ public void setDebug(){ QueryBuilder.LOG_SQL = true; QueryBuilder.LOG_VALUES = true; } /** * 關閉所有的操作 * 註:資料庫開啟之後,使用完畢必須要關閉 */ public void closeConnection(){ closeHelper(); closeDaoSession(); } public void closeHelper(){ if (helper != null){ helper.close(); helper = null; } } public void closeDaoSession(){ if (daoSession != null){ daoSession.clear(); daoSession = null; } }}
6.最後就是對錶具體的操作了,下一篇來記錄: