Android ORM 框架:GreenDao 使用詳解
一、GreenDao 簡介
greenDAO 是一款開源的面向 Android 的輕便、快捷的 ORM 框架,將 Java 物件對映到 SQLite 資料庫中,我們操作資料庫的時候,不在需要編寫複雜的 SQL語句, 在效能方面,greenDAO 針對 Android 進行了高度優化, 最小的記憶體開銷 、依賴體積小 同時還是支援資料庫加密。
二、GreenDao 特徵:
1、物件對映( ORM)
greenDAO 是ORM 框架,可以非常便捷的將Java 物件對映到 SQLite 資料庫中儲存。
2、高效能
ORM 框架有很多,比較著名的有 OrmLite , ActiveAndroid 等,效能也不一樣,下圖是 GreenDao 官方給出的效能對比。
3、支援加密
GreenDao 是支援加密的,可以安全的儲存使用者資料。
4、輕量級
GreenDao 核心庫小於100k ,所以我們並不會擔心新增 GreenDao 後 APK 大小會變的是否龐大。
5、支援 protocol buffer(protobuf) 協議
GreenDao 支援 protocol buffer(protobuf) 協議資料的直接儲存,如果你通過 protobuf 協議與伺服器互動,將不需要任何的對映。
6,程式碼生成
greenDAO 會根據配置資訊自動生成核心管理類以及 DAO 物件
7,開源
三、核心類介紹
DaoMaster:
使用 greenDAO 的入口點。DaoMaster 負責管理資料庫物件(SQLiteDatabase)和 DAO 類(物件),我們可以通過它內部類 OpenHelper 和 DevOpenHelper SQLiteOpenHelper 建立不同模式的 SQLite 資料庫。
DaoSession :
管理指定模式下的所有 DAO 物件,DaoSession提供了一些通用的永續性方法比如插入、負載、更新、更新和刪除實體。
XxxDAO :
每個實體類 greenDAO 多會生成一個與之對應DAO物件,如:User 實體,則會生成一個一個UserDao 類
Entities
可持久化物件。通常, 實體物件代表一個數據庫行使用標準 Java 屬性(如一個POJO 或 JavaBean )。
核心類之間的關係
四、 整合 GreenDAO
a、設定倉庫與外掛(Project: build.gradle)
- buildscript {
- repositories {
- jcenter
- mavenCentral()// add repository
- }
- dependencies {
- classpath 'com.android.tools.build:gradle:2.3.2'
- classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'// add plugin
- }
- }
b、 配置依賴 ( Module:app build.gradle )
- apply plugin:'com.android.application'
- apply plugin:'org.greenrobot.greendao'// apply plugin
- dependencies {
- compile 'org.greenrobot:greendao:3.2.2'// add library
- // This is only needed if you want to use encrypted databases
- compile 'net.zetetic:android-database-sqlcipher:3.5.6'//加密庫依賴(可選項)
- }
c、 配置資料庫相關資訊 ( Module:app build.gradle )
- greendao {
- schemaVersion 1//資料庫版本號
- daoPackage 'com.speedystone.greendaodemo.db'// 設定DaoMaster、DaoSession、Dao 包名
- targetGenDir 'src/main/java'//設定DaoMaster、DaoSession、Dao目錄
- }
d、點選 : Sync Project with Gradle Files 按鈕,同步一下工程 , 配置完成
五、快速入門
1, 我們寫一個簡單的實體類(User),測試一下
- package com.speedystone.greendaodemo.model;
- import org.greenrobot.greendao.annotation.Entity;
- import org.greenrobot.greendao.annotation.Id;
- /**
- * Created by Speedy on 2017/6/30.
- */
- @Entity
- publicclassUser{
- @Id
- privatelong id;
- privateString name;
- privateint age;
- //此處省略了getter,setter 方法
- }
2、點選 Make Project(或者 Make Moudle 'App') 編譯一下工程 。如果配置正確,會在配置的包目錄下自動會生成 DaoMaster,DaoSession 和 UserDao 類 。
3,初始化 GreenDao ( 通常初始化程式碼寫在我們的 Application 類中)
4,獲取 UserDao
- MyApp myApp =(MyApp) getApplication();
- DaoSession daoSession = myApp.getDaoSession();
- UserDao userDao = daoSession.getUserDao();
5, 儲存記錄
- User user =newUser();
- user.setUserId(1);
- user.setName("小明");
- user.setAge(16);
- userDao.insert(user);
- User user =newUser();
- user.setUserId(1);
- user.setName("小明");
- user.setAge(16);
- //插入或者替換
- userDao.insertOrReplace(user);
5, 刪除記錄
- publicvoiddelete(User user){
- userDao.delete(user);
- }
或者
- publicvoid deleteByUserId(long userid){
- userDao.deleteByKey(1L);
- }
6,更新記錄
- publicvoid update(User user){
- userDao.update(user);
- }
7,查詢記錄
- publicList query(){
- return userDao.loadAll();// 查詢所有記錄
- }
- publicUser query2(){
- return userDao.loadByRowId(1);//根據ID查詢
- }
- publicList query2(){
- return userDao.queryRaw("where AGE>?","10");//查詢年齡大於10的使用者
- }
- //查詢年齡大於10的使用者
- publicList query4(){
- QueryBuilder builder = userDao.queryBuilder();
- return builder.where(UserDao.Properties.Age.gt(10)).build().list();
- }
六、註解詳解
@Entity
表明這個實體類會在資料庫中生成一個與之相對應的表
屬性:
schema:告知GreenDao當前實體屬於哪個 schema
schema active:標記一個實體處於活躍狀態,活動實體有更新、刪除和重新整理方法
nameInDb:在資料庫中使用的別名,預設使用的是實體的類名,
indexes:定義索引,可以跨越多個列
createInDb:標記建立資料庫表(預設:true)
generateConstructors 自動建立全參構造方法(同時會生成一個無參構造方法)(預設:true)
generateGettersSetters 自動生成 getters and setters 方法(預設:true)
- @Entity(
- schema ="myschema",
- active =true,
- nameInDb ="AWESOME_USERS",
- indexes ={
- @Index(value ="name DESC", unique =true)
- },
- createInDb =true,
- generateConstructors =false,
- generateGettersSetters =true
- )
- publicclassUser{
- ...
- }
@Id
對應資料表中的 Id 欄位
@Index
使用@Index作為一個屬性來建立一個索引,預設是使用欄位名
- @Entity
- publicclassUser{
- @Id
- privateLong id;
- @Index(unique =true)
- privateString name;
- }
@Property
設定一個非預設關係對映所對應的列名,預設是使用欄位名,例如:@Property(nameInDb = "userName")
@NotNull
設定資料庫表當前列不能為空
@Transient
新增此標記後不會生成資料庫表的列
相關推薦
Android ORM 框架:GreenDao 使用詳解(進階篇)
前言 一、複雜表結構 a, 使用 @ToOne 建立一對一 ( 1 : 1) 關係 @Entity public class Order { @Id private Long id; private lo
Android ORM 框架:GreenDao 使用詳解
一、GreenDao 簡介greenDAO 是一款開源的面向 Android 的輕便、快捷的 ORM 框架,將 Java 物件對映到 SQLite 資料庫中,我們操作資料庫的時候,不在需要編寫複雜的 SQL語句, 在效能方面,greenDAO 針對 Android
Android ORM 框架:GreenDao 資料庫升級
前言 一,GreenDao 預設的升級方式 GreenDao 預設的升級方式是刪除所有舊版,在重新建新表,這樣一來使用者的本地歷史資料則會丟失,這點我們通過DaoMaster 的內部類 DevOpenHelper 原始碼可以瞭解到。
Android ORM 框架之 greenDAO 使用心得
前言 我相信,在平時的開發過程中,大家一定會或多或少地接觸到 SQLite。然而在使用它時,我們往往需要做許多額外的工作,像編寫 SQL 語句與解析查詢結果等。所以,適用於 Android 的ORM 框架也就孕育而生了,現在市面上主流的框架有 OrmLite、SugarOR
Ibatis 半自動ORM框架的應用詳解
iBATIS一詞來源於“internet”和“abatis”的組合,是一個由Clinton Begin在2001年發起的開放原始碼專案。最初側重於密碼軟體的開發,現在是一個基於Java的持久層框架。 一站式 iBATIS提供的持久層框架包括SQL Maps和Data Acc
Android開源框架Frsco的詳解
(1)layout_width和layout_height不支援warp_Content但是可以通過setAspectRetio();來設定寬高比 (2)fadeDuration()淡出時間; (3)actualImageScaleType 設定圖片縮放,通常使用foucsCrop,該屬性值會通過演算法把人
struts2框架學習筆記2:配置詳解
true class 規範 開發規範 刪除用戶 建議 類名 esp 需要 核心配置文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Soft
layer-list:Android中layer-list使用詳解
layout nbsp 分享 sel 效果圖 技術分享 ner select ati 使用layer-list可以將多個drawable按照順序層疊在一起顯示,默認情況下,所有的item中的drawable都會自動根據它附上view的大小而進行縮放, layer-list
實戰 :Spring MVC + 註解 +SqlServer 框架搭建及詳解
原始碼下載:http://download.csdn.NET/detail/u010469432/6786687 https://blog.csdn.net/u010469432/article/details/17587699 先說一下Spring3 MVC的優點: spring&nb
Android ORM框架GreenDao入門學習
最近想了解一下關於Android ORM的東西,在網上一搜,框架還真不少,很多人都說GreenDao效能不錯,這週末就好好搞了下。 現在Goodle推出了Android studio這款開發利器,是用Gradle構建,感覺還不錯。以下專案都是用Android studio 0.8.14開發。
分享知識-快樂自己:Hibernate框架常用API詳解
1):Configuration配置物件 Configuration用於載入配置檔案。 1): 呼叫configure()方法,載入src下的hibernate.cfg.xml檔案 Configuration conf = new Configuration().configure(); 2)
安卓專案實戰之強大的網路請求框架okGo使用詳解(六):擴充套件專案okServer,更強大的下載上傳功能,支援斷點和多工管理
OkGo與OkDownload的區別就是,OkGo只是簡單的做一個下載功能,不具備斷點下載,暫停等操作,但是這在很多時候已經能滿足需要了。 而有些app需要有一個下載列表的功能,就像迅雷下載一樣,每個下載任務可以暫停,可以繼續,可以重新下載,可以有下載優先順序,這時候OkDownload就有
安卓專案實戰之強大的網路請求框架okGo使用詳解(五):擴充套件專案okRx,完美結合RxJava
前言 在第一篇講解okGo框架新增依賴支援時,還記得我們額外新增的兩個依賴嗎,一個okRx和一個okServer,這兩個均是基於okGo框架的擴充套件專案,其中okRx可以使請求結合RxJava一起使用,而okServer則提供了強大的下載上傳功能,如斷點支援,多工管理等,本篇我們主要講
安卓專案實戰之強大的網路請求框架okGo使用詳解(四):Cookie的管理
Cookie概念相關 具體來說cookie機制採用的是在客戶端保持狀態的方案,而session機制採用的是在伺服器端保持狀態的方案。同時我們也看到,由於採用伺服器端保持狀態的方案在客戶端也需要儲存一個標識,所以session機制是需要藉助於cookie機制來達到儲存標識的目的,所謂ses
安卓專案實戰之強大的網路請求框架okGo使用詳解(三):快取的使用
相關實體類必須實現序列化介面 使用快取前,必須讓涉及到快取javaBean物件實現Serializable介面,否者會報NotSerializableException。因為快取的原理是將物件序列化後直接寫入資料庫中,如果不實現Serializable介面,會導致物件無法序列化,進而無法
安卓專案實戰之強大的網路請求框架okGo使用詳解(二):深入理解Callback之自定義JsonCallback
前言 JSON是一種取代XML的資料結構,和xml相比,它更小巧但描述能力卻不差,由於它的小巧所以網路傳輸資料將減少更多流量從而加快了傳輸速度,目前客戶端伺服器返回的資料大多都是基於這種格式的,相應的我們瞭解的關於json的解析工具主要有兩個:Gson(Google官方出的)和fas
安卓專案實戰之強大的網路請求框架okGo使用詳解(一):實現get,post基本網路請求,下載上傳進度監聽以及對Callback自定義的深入理解
1.新增依賴 //必須使用 compile 'com.lzy.net:okgo:3.0.4' //以下三個選擇新增,okrx和okrx2不能同時使用,一般選擇新增最新的rx2支援即可 compile 'com.lzy.net:okrx:1.0.2' compile 'com.lzy
實戰 :Spring MVC + 註解 +SqlServer 框架搭建及詳解
先說一下Spring3 MVC的優點: spring MVC 屬於輕量級框架 1、Spring3 MVC的學習難度小於Struts2,Struts2用不上的多餘功能太多。呵呵,當然這不是決定因素。 2、Spring3 MVC很容易就可以寫出效能優秀的程式,Str
Android網路請求框架Retrofit使用詳解
前言 技術日新月異,一天不跑,就out了! 早點的Android的網路請求框架android-async-http,Volley,XUtils早已被拋諸腦後,到前段時間的OKHttp,再到最近一段時間大火的Retrofit,封裝的越來越好!程式碼越來越簡潔!
一款超級簡單易用的Android熱修復框架 WandFix 使用詳解
WandFix是一個基於java ClassLoader實現的熱修復框架。 效果展示: 優點: 類似於黃油刀可以直接對成員變數新增@InjectObject("com.example.motordex.AppParsenterImpl2")註解,來繫結熱修復包中的實現類。 無需關閉應用即可