Android高效能ORM資料庫DBFlow入門教程
DBFlow,綜合了 ActiveAndroid, Schematic, Ollie,Sprinkles 等庫的優點。同時不是基於反射,所以效能也是非常高,效率緊跟greenDAO其後。基於註解,使用apt技術,在編譯過程中生成操作類,使用方式和ActiveAndroid高度相似,使用簡單。
特性:
1、無縫支援多個資料庫;
2、使用annotation processing提高速度;
3、ModelContainer類庫可以直接解析像JSON這樣的資料;
4、增加靈活性的豐富介面。
github倉庫:https://github.com/Raizlabs/DBFlow
DBFlow在國內可能用的人不是很多,所以中文介紹很少,所以就有了這篇文章,接下來就讓我們一起學習DBFlow。
一、引入依賴、初始化
需要引入apt和maven,配置專案的 build.gradle
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.0.0-beta6' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' } } allprojects { repositories { jcenter() maven { url "https://jitpack.io" } } }
配置app的build.gradle
apply plugin: 'com.android.application' apply plugin: 'com.neenbedankt.android-apt' def dbflow_version = "3.0.0-beta4" android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { applicationId "cn.taoweiji.dbflowexample" minSdkVersion 14 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) 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}" }
需要在Application的onCreate對DBFlow進行初始化
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); FlowManager.init(this); } }
記得修改AndroidManifest.xml
<application android:name=".MyApplication" ../>
二、資料庫建立、表建立
定義資料庫
我這裡定義了一個名稱叫做AppDatabase的資料庫,可以根據自己的喜歡進行定義。
@Database(name = AppDatabase.NAME, version = AppDatabase.VERSION) public class AppDatabase { //資料庫名稱 public static final String NAME = "AppDatabase"; //資料庫版本號 public static final int VERSION = 1; }
建立資料庫物件
必須繼承BaseModel,BaseModel包含了基本的資料庫操作(save、delete、update、insert、exists),看下面程式碼可以發現這個表是關聯上面定義的資料庫,People的id是自增的id。
@ModelContainer @Table(database = AppDatabase.class) public class People extends BaseModel { //自增ID @PrimaryKey(autoincrement = true) public Long id; @Column public String name; @Column public int gender; }
編寫完資料表物件後,點選Android studio的build->Make Project(Mac的童鞋直接command+F9)就會使用apt進行了編譯,
檢視目錄(我的people類放在cn.taoweiji.dbflowexample.db)
app/build/generated/source/apt/debug/cn/taoweiji/dbflowexample/db
就可以看到自動生成 People_Adapter、People_Container、People_Table,其中People_Table在後面使用有很大的作用,建議詳細看看它的結構。
三、增刪改
由於資料表物件繼承了BaseModel,已經包含了很多的操作
People people = new People(); people.name = "Wiki"; people.gender = 1; people.save(); //people.update(); //people.delete(); Log.e("Test", String.valueOf(people.id));
刪除、更新等操作就自己體驗,這裡就不多說了。
四、查詢
//返回所有查詢結果 List<People> peoples = new Select().from(People.class).queryList(); //返回單個查詢結果 People people = new Select().from(People.class).querySingle(); //查詢gender = 1的所有People List<People> peoples2 = new Select().from(People.class).where(People_Table.gender.eq(1)).queryList();
DBFlow的查詢方式借鑑ActiveAndroid的,但是比ActiveAndroid功能還要強大。
五、事務、批量儲存
事務是一個資料必須具備的,如果儲存10000條資料,一條一條儲存必然是很慢的,所以就需要用到事務,批量儲存。DBFlow的事務非常的強大,同時使用也很複雜,這裡就簡單介紹批量儲存,更多內容請檢視官方文件
https://github.com/Raizlabs/DBFlow/blob/master/usage/Transactions.md
List<People> peoples = new ArrayList<>(); for (int i = 0; i < 1000; i++) { People people = new People(); people.name = "Wiki"; people.gender = 1; peoples.add(people); } //實時儲存,馬上儲存 new SaveModelTransaction<>(ProcessModelInfo.withModels(peoples)).onExecute(); //非同步儲存,使用非同步,如果立刻查詢可能無法查到結果 //TransactionManager.getInstance().addTransaction(new SaveModelTransaction<>(ProcessModelInfo.withModels(peoples)));
六、資料庫升級(增加表、增加欄位等)
如果是新增表無需做特別的處理,直接修改AppDatabase的版本號即可。
如果需要新增欄位,除了需要修改AppDatabase的版本號外,還需要做特殊的處理,DBFlow的描述是:Migrations。
例子:對People新增一個email欄位
第1步,修改資料庫版本號
@Database(name = AppDatabase.NAME, version = AppDatabase.VERSION) public class AppDatabase { //資料庫名稱 public static final String NAME = "AppDatabase"; //資料庫版本號,這裡修改2 public static final int VERSION = 2; }
第2步,需要修改資料表物件結構,增加email
@ModelContainer @Table(database = AppDatabase.class) public class People extends BaseModel { //自增ID @PrimaryKey(autoincrement = true) public Long id; @Column public String name; @Column public int gender; @Column public String email; }
第3步,執行第二步之後,需要build(Android studio的build->Make Project、Mac的童鞋直接command+F9),通過apt更新People_Table,接下來編寫Migrations
@Migration(version = 2, database = AppDatabase.class) public class Migration_2_People extends AlterTableMigration<People> { public Migration_2_People(Class<People> table) { super(table); } @Override public void onPreMigrate() { addColumn(SQLiteType.TEXT, People_Table.email.getNameAlias().getName()); } }
類名可以更加自己喜歡定義,我個人的規則是,按照資料庫版本號和需要更新的資料表來命名,需要注意是:version = 2
資料庫升級就大功告成了。
總結
這篇文章只是簡單介紹了DBFlow的基本功能使用,DBFlow還有很多很厲害的功能,比如多資料庫支援、Powerful Model Caching等,而且還支援Kotlin語言(執行在Java虛擬機器的新語言)。我只使用過greenDAO、activeAndroid、afinal、DBFlow資料庫,所以在我看來,DBFlow是我用過的資料庫當中最好用的資料庫,效能也很好,使用非常簡單,高度推薦。
我在github上共享一下DBFlow的配置:https://github.com/taoweiji/DBFlowExample
相關文章
- 好用的 Android 資料庫 DBFlowAndroid資料庫
- cache資料庫入門教程資料庫
- Nodejs教程21:資料庫入門NodeJS資料庫
- Oracle資料庫初學者入門教程Oracle資料庫
- 瀏覽器資料庫 IndexedDB 入門教程瀏覽器資料庫Index
- Android ORM 框架:GreenDao 資料庫升級AndroidORM框架資料庫
- ORM入門ORM
- 《MySQL 入門教程》第 03 篇 管理資料庫MySql資料庫
- Python 資料處理庫 pandas 入門教程Python
- C#快速入門教程(27)—— SQL Server資料庫C#SQLServer資料庫
- Android入門教程 | RecyclerView使用入門AndroidView
- css入門教程資料(4)CSS
- MongoDB資料庫入門MongoDB資料庫
- Room ORM 資料庫框架OOMORM資料庫框架
- ADO.NET入門教程之資料庫連線池資料庫
- Android入門教程 | Kotlin協程入門AndroidKotlin
- Realm for Android快速入門教程Android
- Android SQLite快速入門教程AndroidSQLite
- SqlSugar ORM 入門到精通【一】入門篇SqlSugarORM
- 手機資料抓包入門教程
- 【Android開發入門教程】三.Activity入門指南!Android
- 2、Entity Framework Core 3.1入門教程-建立資料庫和遷移Framework資料庫
- dbForge Studio for SQL Server入門教程:如何連線到資料庫SQLServer資料庫
- 資料庫事務入門指南資料庫
- 前端的資料庫:IndexedDB入門前端資料庫Index
- beego的ORM-配置資料庫GoORM資料庫
- 3. 資料庫 database & Eloquent ORM資料庫DatabaseORM
- Django ORM 資料庫生命週期DjangoORM資料庫
- Struts2入門教程(學習教程資料).pdf
- Android目前流行三方資料庫ORM分析及對比Android資料庫ORM
- LVGL庫入門教程 - 動畫動畫
- Laravel 入門教程中-資料填充-修改分享Laravel
- 《MySQL 入門教程》第 10 篇 資料排序MySql排序
- Redis入門教程(二)— 基本資料型別Redis資料型別
- Python入門教程—資料分析工具PandasPython
- AE入門教程及素材資料連結
- 雲端計算教程學習入門影片課件:常用資料庫排名資料庫
- MySQL基礎入門學習教程:mysql資料庫的實現原理MySql資料庫