數據庫DBFlow應用場景及其分析java
先上一張效果圖android
dbflow是一款android高性的ORM數據庫.可使用在進行項目中有關數據庫的操做。git
dbflow是Android SQLite ORM 的一個工具庫。綜合了 Active Android, Schematic, Ollie,Sprinkles 等庫的優勢;經過註解實現,性能好;能生成 ContentProvidergithub
根據DBFlow的源碼來看,是分多個module的,有一個module叫作processor,這是編譯時註解處理器Module,看到AbstractProcessor了吧,編譯時註解處理器都須要繼承這個類,可見DBFlow是編譯時註解處理,在編譯時就將表相關信息生成了,在編譯的時候會把生成的java代碼和你本身項目的代碼打包到一塊兒,在運行時,就能夠調用這些代碼了,不須要再寫運行時註解處理器,避免反射機制帶來的性能負擔。sql
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()bash
開源: 整個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是我用過的數據庫當中最好用的數據庫,性能也很好,使用很是簡單,高度推薦。
項目地址:
推薦文檔
關於更多:
若是你以爲此文對您有所幫助, 歡迎加入微信公衆號:終端研發部