Android數據庫——GreenDao使用

背景

通過Android數據庫——SQLite 可以看出儘管Android已經爲我們提供了sqlite數據庫內核,但我們要想操作數據庫還需要自己拼sql,在大量的增刪改查中拼sql這種操作顯然是大大降低了我們的工作效率,因此Android的 orm(Object/Relational Mapping) 框架應運而生。大概在15、16年前後出現了大量的這種框架,而選擇greendao的夥伴們大概都是因下面這張圖:在這裏插入圖片描述
那時候還是greendao2.0的時代,aop 還沒那麼普遍(額,現在不用aop都不敢稱爲框架了),greendao的集成方式相對其他框架而言算是比較複雜的。但爲了更好的用戶體驗,我們偉大的Android開發工程師還是選擇了它。

GreenDao 2.0集成

上面說它集成有些複雜,我們來看看是要如何集成

  1. 創建一個java項目
    爲了操作方便,最好和當前的Android項目在同一個project下
  2. 在java項目中添加greendao的依賴
    compile 'de.greenrobot:greendao-generator:2.1.0'
    
  3. 在java項目的main方法中完成以下操作
    public static void main(String[] arg) {
    	// 7 爲數據庫版本號
    	// "com.fcat.cloud.bean" 爲Android項目中bean存放目錄,greendao會自動在該目錄下生產bean
    	Schema schema = new Schema(7, "com.fcat.cloud.bean");
    	//dao生成的目錄
    	schema.setDefaultJavaPackageDao("com.fcat.cloud.dao");
    	//添加要存放的實體類
    	Entity user = schema.addEntity("UserInfo");
    	//該實體存放的表的名稱
    	user.setTableName("userTable");
    	//表中的字段(類的屬性)
    	user.addStringProperty("nickName");
    	user.addIntProperty("sex");
    	user.addStringProperty("birthday");
    	//添加userName,並將其設置爲主鍵
    	user.addStringProperty("userName").primaryKey();
    	// /aaa/bbb 爲Android項目所在目錄
    	new DaoGenerator().generateAll(schema, '/aaa/bbb'); 
    }
    
    執行該main方法,則會在Android項目的com.fcat.cloud.bean的目錄下生成UserInfo類,裏面包含了上面生成的字段及字段的get、set方法。在com.fcat.cloud.dao下面生成DaoMasterDaoSessionUserInfoDao三個類,如果這些代碼都成功生成,說明集成成功。

GreenDao 3.0集成

從上面我們瞭解到要使用GreenDao2.0需要創建個java項目,而這個java項目的工作就是自動生成代碼。早期很多orm框架都是用註解+反射來實現這個步驟的,而反射的性能是比較低的。GreenDao的java項目正是解決了這個低效問題,但作爲開發者來說,我們並不想維護這個java項目,而GreenDao 3.0中使用aop技術幫我們解決了這個問題。

  1. 在項目中添加GreenDao 3.0的依賴
    implementation 'org.greenrobot:greendao:3.1.0'
    implementation 'org.greenrobot:greendao-generator:3.1.0'
    
  2. 在gradle中配置版本信息
    在project的gradle中添加
    classpath 'org.greenrobot:greendao-gradle-plugin:3.1.0'
    
    在app的gradle中添加
    apply plugin: 'org.greenrobot.greendao'
    greendao {
        // 數據庫schema版本號
        schemaVersion 3
        // 生成的dao的包名
        daoPackage 'com.fcat.cloud.dao'
        // 生成的dao的存放路徑
        targetGenDir 'src/main/java'
    }
    
  3. 編輯要存入數據庫的類
    // GreenDao會根據@Entity註解來生成對應的數據表,表名默認爲類名,可以使用nameInDb進行更改
    @Entity(nameInDb = "userTable")
    public class UserInfo{
    	// 自動生成自增長id
    	@Id(autoincrement = true)
    	public Long id;
    	public String userName;
    	public String nickName;
    	public int sex;
    	public String birthday;
    	// @Transient修飾的字段不會添加到數據表中
    	@Transient
    	public String tag;
    }
    
    OK,這樣就可以了。GreenDao 3.0 的集成跟其他orm的框架還是很相似的。

GreenDao使用

GreenDao在使用上2.0和3.0還是保持一致的。數據的增刪改查都是通過dao來執行,dao則是通過daoSession來獲取,整體調用鏈是:

DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, "cloud", null);
SQLiteDatabase db = helper.getWritableDatabase();
DaoMaster daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
UserInfoDao userinfoDao = daoSession.getUserInfoDao()

拿到dao之後,我們就可以直接調用裏面的insert、update、delete等方法。

GreenDao前景

關於greendao的前景,我並不看好,主要來自於兩個方面

  1. 就目前而言,greendao還不支持kotlin,而且谷歌的 jetpack 也包含了數據庫操作的組件 Room,Room是支持kotlin的。
  2. 出現可速度更快,使用更簡單的數據引擎,objectbox,在greendao官網上也是推薦使用objectbox
    for new apps we recommend ObjectBox, a new object-oriented database that is much faster than SQLite and easier to use.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章