DBFlow使用

DBFlow優(yōu)點(diǎn)介紹

DBFlow的設(shè)計(jì)吸取了其他很多ORM框架中好的特征,并將之做得更好。它很靈活,讓你能更專注于App中真正需要關(guān)注的地方。不要讓一個(gè)ORM庫(kù)限制了你的思維,而是讓代碼在你的App中工作得更好。

擴(kuò)展性: ORM所需的數(shù)據(jù)類只需要實(shí)現(xiàn)Model接口即可,而不需要必須繼承一個(gè)類,同時(shí)為了方便,我們還是推薦繼承BaseModel,這是Model接口的一個(gè)標(biāo)準(zhǔn)實(shí)現(xiàn)。這樣你既可以通過(guò)繼承一個(gè)來(lái)自其他包的非Model類來(lái)生成你的數(shù)據(jù)庫(kù)表,也可以通過(guò)繼承一個(gè)Model類并通過(guò)添加@Column注解的屬性向表中自由添加列。這一切都是為了方便你的使用。

速度:DBFlow基于AnnotationProcessing(注解處理器),通過(guò)編譯期代碼生成,運(yùn)行時(shí)對(duì)性能是零損耗的。通過(guò)模板來(lái)為你維護(hù)生成的代碼。通過(guò)緩存和盡可能地重用對(duì)象,我們得到了比原生SQLite更快的速度。同時(shí)我們還支持懶加載(lazy-loading),比如對(duì)于@ForeignKey和@OneToMany,這使得我們有著更高效得查詢效率

SQLite查詢流(SQLite Query Flow):
DBFlow的查詢語(yǔ)法盡可能地和SQL語(yǔ)句相似,使您能更快上手。select(name,
screenSize).from(Android.class).where(name.is(“Nexus
5x”)).and(version.is(6.0)).querySingle()

開(kāi)源: 整個(gè)DBFlow庫(kù)都是開(kāi)源的,而且也非常歡迎大家來(lái)為這個(gè)庫(kù)貢獻(xiàn)自己的力量。 Robust:
我們支持Trigger,ModelView,Index,Migration,所有的數(shù)據(jù)庫(kù)操作都在同一個(gè)線程(線程安全),還有其他特性。

多數(shù)據(jù)庫(kù)、多表單: 我們無(wú)縫支持多數(shù)據(jù)庫(kù)文件,database modules using DBFlow in other
dependencies, simultaneously. 基于SQLite:
SQLite是世界上使用最廣泛的數(shù)據(jù)庫(kù)引擎,基于SQLite的DBFlow使你不需要被限制在某些平臺(tái)上。

特性:
1、無(wú)縫支持多個(gè)數(shù)據(jù)庫(kù);
2、使用annotation processing提高速度;
3、ModelContainer類庫(kù)可以直接解析像JSON這樣的數(shù)據(jù);
4、增加靈活性的豐富接口。

1.配置

在項(xiàng)目目錄的build.gradle中加入:

allprojects {
    repositories {
        ...
        // required to find the project's artifacts
        maven { url "https://www.jitpack.io" }
    }
}

dependencies {
      ...
      classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}

在工程目錄的build.gradle中加入:

apply plugin: 'com.neenbedankt.android-apt'

def dbflow_version = "4.0.0-beta5"
dependencies {
    annotationProcessor "com.github.Raizlabs.DBFlow:dbflow-processor:${dbflow_version}"

    // use kapt for kotlin apt if you're a Kotlin user
    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}

2.使用

首先在自定義Application中初始化

public class myApplication extends Application{

    @Override
    public void onCreate() {
        super.onCreate();
        FlowManager.init(new FlowConfig.Builder(this).build());
    }

1.創(chuàng)建數(shù)據(jù)庫(kù)

@Database(name = DBFlowDatabase.NAME, version = DBFlowDatabase.VERSION)
public class DBFlowDatabase {
    //數(shù)據(jù)庫(kù)名稱
    public static final String NAME = "DBFlowDatabase";
    //數(shù)據(jù)庫(kù)版本號(hào)
    public static final int VERSION = 1;
}

2.創(chuàng)建Model

import com.raizlabs.android.dbflow.annotation.Column;
import com.raizlabs.android.dbflow.annotation.ModelContainer;
import com.raizlabs.android.dbflow.annotation.PrimaryKey;
import com.raizlabs.android.dbflow.annotation.Table;
import com.raizlabs.android.dbflow.structure.BaseModel;

@ModelContainer //表示可以直接解析JSON
@Table(database = DBFlowDatabase.class)
public class UserModel extends BaseModel {
    //自增ID
    @Column
    @PrimaryKey(autoincrement = true)
    public Long id;
    @Column
    public String name;
    @Column
    public int sex;
}

必須繼承BaseModel,BaseModel包含了基本的數(shù)據(jù)庫(kù)操作(save、delete、update、insert、exists)

一個(gè)正確的數(shù)據(jù)表類需要以下幾項(xiàng): 對(duì)類添加@Table注解 聲明所連接的數(shù)據(jù)庫(kù)類,這里是DBFlowDatabase。 定義至少一個(gè)主鍵。
這個(gè)類和這個(gè)類中數(shù)據(jù)庫(kù)相關(guān)列的修飾符必須是包內(nèi)私有或者public。 這樣生成的_Adapter類能夠訪問(wèn)到它。 NOTE:
列(Column)屬性可以是private,但這樣就必須指定公有public的getter和setter方法。

創(chuàng)建完成后,需要編譯一下,點(diǎn)擊編譯按鈕,或者Build->Make Project即可,它會(huì)自動(dòng)生成一些數(shù)據(jù)庫(kù)文件,也會(huì)提示你創(chuàng)建是否有誤!

3.增刪改查

UserModel people = new UserModel();

        people.name = "張三";
        people.sex = 1;
        people.save();//添加對(duì)象,一條一條保存


        //people.update();//更新對(duì)象
        //people.delete();//刪除對(duì)象
      

多對(duì)多關(guān)系:

@Table(database = DBFlowDatabase.class)
@ManyToMany(referencedTable = UserModel.class)
public class MediaModel extends BaseModel {

加入ManyToMany注解后build,會(huì)自動(dòng)生成中間表,但關(guān)系還是需要自己手動(dòng)維護(hù)


一對(duì)一,一對(duì)多,多對(duì)多關(guān)系:http://m.itdecent.cn/p/e875b16283c6
官方文檔:https://github.com/Raizlabs/DBFlow/blob/master/usage2/Intro.md
DBFlow使用手冊(cè):https://yumenokanata.gitbooks.io/dbflow-tutorials/content/sql_wrapper_classes.html
原文:http://blog.csdn.net/qq_16131393/article/details/50932020
參考:http://blog.sina.com.cn/s/blog_5d911a3f0101pwiq.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,366評(píng)論 25 708
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,835評(píng)論 4 61
  • 原創(chuàng)文章 轉(zhuǎn)載請(qǐng)注明出處 文|白色風(fēng)車騎士 一段感情里,女人的終極問(wèn)題就是:他愛(ài)不愛(ài)我。表白之前要問(wèn),戀愛(ài)的時(shí)候要...
    白色風(fēng)車騎士閱讀 357評(píng)論 0 2
  • 彩云飛, 韶華傾付無(wú)悔, 半載春秋恍如夢(mèng), 空山雨來(lái)去, 曉月寒幾回。 春來(lái)青青堤柳垂, 楊絮飄若雪, 桃花粉成堆...
    箐薇閱讀 321評(píng)論 0 1
  • 一.我的收獲 1.情境&沖突 對(duì)于學(xué)習(xí)區(qū)和恐慌區(qū)的問(wèn)題,小我會(huì)有痛苦情緒進(jìn)而會(huì)想去逃避問(wèn)題。理性我覺(jué)察到有情緒有問(wèn)...
    許楷模閱讀 361評(píng)論 1 2

友情鏈接更多精彩內(nèi)容