最近項目重構,涉及到了數據庫和文件下載,發現GreenDao這個框架還是不錯的。直接面向對象的,可以通過對對象的操作,實現數據的存儲。
但是官網上的API是在不敢恭維,文檔寫的很糙,看了半天,才搞懂一系列的流程。在此進行一下紀念。免得那天需要修改的時候,一臉懵逼。直接上干貨
官網地址:http://greenrobot.org/greendao/
Github地址:https://github.com/greenrobot/greenDAO
GreenDao 優點:
1.性能高,號稱Android最快的關系型數據庫
2.內存占用小
3.庫文件比較小,小於100K,編譯時間低,而且可以避免65K方法限制
4.支持數據庫加密 greendao支持SQLCipher進行數據庫加密 有關SQLCipher可以參考這篇博客Android數據存儲之Sqlite采用SQLCipher數據庫加密實戰
5.簡潔易用的API
第一步:將項目需要的工程庫進行引用
注:GreenDao可以自定義數據庫操作對象的路徑示例如下:
此處路徑對應的是APP的gradle文件,android節點內填寫。
屬性介紹:
schemaVersion--> 指定數據庫schema版本號,遷移等操作會用到;
daoPackage --> dao的包名,包名默認是entity所在的包;
targetGenDir --> 生成數據庫文件的目錄;
第二步:創建一個實體類
1 @Entity 2 public class ClassInfoBean { 3 //表ID,是每一條記錄的唯一標識,自增 4 @Id(autoincrement = true) 5 private Long tabid; 6 /** 班型ID */ 7 private Integer classTypeId; 8 /** 班型編碼 */ 9 private String classTypeCode; 10 /** 班型名稱 */ 11 private String classTypeName; 12 /** 分期 */ 13 private Integer period; 14 /** 年級 */ 15 private Integer gradeId; 16 /** 科目 */ 17 private Integer subjectId; 18 /** 學科 */ 19 private Integer subjectProductId; 20 }
相關注解說明:
- 實體@Entity注解
schema:告知GreenDao當前實體屬於哪個schema
active:標記一個實體處於活躍狀態,活動實體有更新、刪除和刷新方法
nameInDb:在數據庫中使用的別名,默認使用的是實體的類名
indexes:定義索引,可以跨越多個列
createInDb:標記創建數據庫表
基礎屬性注解
@Id:主鍵 Long 型,可以通過@Id(autoincrement = true)設置自增長
@Property:設置一個非默認關系映射所對應的列名,默認是使用字段名,例如:@Property(nameInDb = “name”)
@NotNull:設置數據庫表當前列不能為空
@Transient:添加此標記后不會生成數據庫表的列
索引注解
@Index:使用@Index作為一個屬性來創建一個索引,通過name設置索引別名,也可以通過unique給索引添加約束
@Unique:向數據庫添加了一個唯一的約束
關系注解
@ToOne:定義與另一個實體(一個實體對象)的關系
@ToMany:定義與多個實體對象的關系
注:定義實體類的時候,不用定義get和set方法。只需寫方法名和相關注解,在后面進行點擊Make Project或者Make Module 'app',就會自動在實體類中生成get和set方法,同時會在自己設定的目錄下看到生成的三個類文件:- DaoMaster- DaoSession- UserDao。(沒有在app的gradle里面設置targetGenDir 路徑的,默認生成目錄如下圖)
第三步:在application中需要初始化數據庫相關操作的對象
1 private static WeexApplication application; 2 @Override 3 public void onCreate() { 4 super.onCreate(); 5 application = this; 6 initGreenDao(); 7 } 8 public static WeexApplication getApplication() { 9 return application; 10 } 11 private SQLiteDatabase db; 12 private DaoSession mDaoSession; 13 private void initGreenDao() { 14 DaoMaster.DevOpenHelper mHelper; 15 DaoMaster mDaoMaster; 16 // 通過DaoMaster 的內部類 DevOpenHelper,你可以得到一個便利的SQLiteOpenHelper 對象。 17 // 可能你已經注意到了,你並不需要去編寫「CREATE TABLE」這樣的 SQL 語句,因為greenDAO 已經幫你做了。 18 // 注意:默認的DaoMaster.DevOpenHelper 會在數據庫升級時,刪除所有的表,意味着這將導致數據的丟失。 19 // 所以,在正式的項目中,你還應該做一層封裝,來實現數據庫的安全升級。 20 mHelper = new DaoMaster.DevOpenHelper(this, "notes-db", null); 21 db = mHelper.getWritableDatabase(); 22 // 注意:該數據庫連接屬於DaoMaster,所以多個 Session 指的是相同的數據庫連接。 23 mDaoMaster = new DaoMaster(db); 24 mDaoSession = mDaoMaster.newSession(); 25 } 26 public DaoSession getDaoSession() { 27 return mDaoSession; 28 } 29 public SQLiteDatabase getDb() {return db;}
至此greendao的使用的相關配置已經全部配置完畢。下次會為大家介紹通過使用greenDao來實現數據庫的增刪改查等操作。