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 23buildToolsVersion "23.0.2"defaultConfig {applicationId "cn.taoweiji.dbflowexample"minSdkVersion 14targetSdkVersion 23versionCode 1versionName "1.0"}buildTypes {release {minifyEnabled falseproguardFiles 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 {@Overridepublic void onCreate() {super.onCreate();FlowManager.init(this);} }記得修改AndroidManifest.xml
<applicationandroid: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;@Columnpublic String name;@Columnpublic 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在后面使用有很大的作用,建議詳細看看它的結構。
注意
如果配置好了后,Make Project后,卻沒有生成_Table, GeneratedDatabaseHolder, _DataBase, _Adapter等,檢查都無誤后,可以檢查一下:
android {compileSdkVersion 23buildToolsVersion "23.0.2"}參考鏈接:體驗Android ORM之DBFlow - 漫漫求學中的孩兒 - 博客頻道 - CSDN.NET
三、增刪改
由于數據表對象繼承了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";//數據庫版本號,這里修改2public static final int VERSION = 2; }第2步,需要修改數據表對象結構,增加email
@ModelContainer @Table(database = AppDatabase.class) public class People extends BaseModel {//自增ID@PrimaryKey(autoincrement = true)public Long id;@Columnpublic String name;@Columnpublic int gender;@Columnpublic 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);}@Overridepublic 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高性能ORM數據庫DBFlow入門 - 陶偉基Wiki - 博客園
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Android高性能ORM数据库DBFlow入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.安装MySQL
- 下一篇: mysql为什么选错索引?怎么解决?