DBFlow—目前最好用的安卓資料庫
資料庫DBFlow應用場景及其分析
先上一張效果圖
dbflow定義
dbflow是一款android高性的ORM資料庫.可以使用在進行專案中有關資料庫的操作。
dbflow是Android SQLite ORM 的一個工具庫。綜合了 Active Android, Schematic, Ollie,Sprinkles 等庫的優點;通過註解實現,效能好;能生成 ContentProvider
為什麼要是用DBFlow
根據DBFlow的原始碼來看,是分多個module的,有一個module叫做processor,這是編譯時註解處理器Module,看到AbstractProcessor了吧,編譯時註解處理器都需要繼承這個類,可見DBFlow是編譯時註解處理,在編譯時就將表相關資訊生成了,在編譯的時候會把生成的java程式碼和你自己專案的程式碼打包到一起,在執行時,就可以呼叫這些程式碼了,不需要再寫執行時註解處理器,避免反射機制帶來的效能負擔。
DBFlow有何優勢
DBFlow的設計吸取了其他很多ORM框架中好的特徵,並將之做得更好。它很靈活,讓你能更專注於App中真正需要關注的地方。不要讓一個ORM庫限制了你的思維,而是讓程式碼在你的App中工作得更好。
*擴充套件性*: ORM所需的資料類只需要實現Model介面即可,而不需要必須繼承一個類,同時為了方便,我們還是推薦繼承BaseModel,這是Model介面的一個標準實現。這樣你既可以通過繼承一個來自其他包的非Model類來生成你的資料庫表,也可以通過繼承一個Model類並通過新增@Column註解的屬性向表中自由新增列。這一切都是為了方便你的使用。
*速度*
:DBFlow基於AnnotationProcessing(註解處理器),通過編譯期程式碼生成,執行時對效能是零損耗的。通過模板來為你維護生成的程式碼。通過快取和儘可能地重用物件,我們得到了比原生SQLite更快的速度。同時我們還支援懶載入(lazy-loading),比如對於@ForeignKey和@OneToMany,這使得我們有著更高效得查詢效率。*SQLite查詢流(SQLite Query Flow)*: DBFlow的查詢語法儘可能地和SQL語句相似,使您能更快上手。select(name, screenSize).from(Android.class).where(name.is(“Nexus 5x”)).and(version.is(6.0)).querySingle()
*開源*: 整個DBFlow庫都是開源的,而且也非常歡迎大家來為這個庫貢獻自己的力量。
Robust: 我們支援Trigger,ModelView,Index,Migration,所有的資料庫操作都在同一個執行緒(執行緒安全),還有其他特性。*多資料庫、多表單*: 我們無縫支援多資料庫檔案,database modules using DBFlow in other dependencies, simultaneously.
*基於SQLite*: SQLite是世界上使用最廣泛的資料庫引擎,基於SQLite的DBFlow使你不需要被限制在某些平臺上。
使用步驟(以最新的為例):
第一步 : 在Module級別的gradle中新增
apply plugin: 'com.neenbedankt.android-apt'
def dbflow_version = "4.1.2"
dependencies {
apt "com.github.Raizlabs.DBFlow:dbflow-processor:${dbflow_version}"
compile "com.github.Raizlabs.DBFlow:dbflow-core:${dbflow_version}"
compile "com.github.Raizlabs.DBFlow:dbflow:${dbflow_version}"
// sql-cipher database encyrption (optional)
compile "com.github.Raizlabs.DBFlow:dbflow-sqlcipher:${dbflow_version}"
}
第二步: 在專案級的gradle中新增
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.2'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
allprojects {
repositories {
jcenter()
maven { url "https://www.jitpack.io" }
}
}
第三步: 初始化
@Override
public void onCreate() {
super.onCreate();
FlowManager.init(new FlowConfig.Builder(this).build());
// FlowManager.init(this);//這句也可以初始化
}
第四步:配置資料庫相關引數
@Database(name = AppDatabase.NAME, version = AppDatabase.VERSION)
public final class AppDatabase {
//資料庫名稱
public static final String NAME = "AppDatabase";
//資料庫版本號
public static final int VERSION = 1;
}
第五步:新建資料庫表
@Table(database = AppDatabase.class)
public class Good extends BaseModel implements Serializable {
@Column
public String gName;
@Column
public String gDes;
@Column
public int num;
@PrimaryKey(autoincrement = true)//ID自增
public long id;
public String getgName() {
return gName;
}
public void setgName(String gName) {
this.gName = gName;
}
public String getgDes() {
return gDes;
}
public void setgDes(String gDes) {
this.gDes = gDes;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
}
androidStudio 報錯
Plugin with id 'com.neenbedankt.android-apt' not found.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
總結
總結:這篇文章只是簡單介紹了DBFlow的基本功能使用,DBFlow還有很多很厲害的功能,比如多資料庫支援、Powerful Model Caching等,而且還支援Kotlin語言(執行在Java虛擬機器的新語言)。我只使用過greenDAO、activeAndroid、afinal、DBFlow資料庫,所以在我看來,DBFlow是我用過的資料庫當中最好用的資料庫,效能也很好,使用非常簡單,高度推薦。
推薦文件
關於更多:
相信自己,沒有做不到的,只有想不到的
如果你覺得此文對您有所幫助, 歡迎加入微信公眾號:終端研發部