91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android數據庫框架DBFlow的使用

發布時間:2020-07-17 22:36:38 來源:網絡 閱讀:827 作者:零點小筑 欄目:移動開發

原文首發于微信公眾號:jzman-blog,歡迎關注交流!

DBFlow 是一個基于注解處理器開發的使用方便的 ORM Android 數據庫,該庫簡化了很多多余的代碼,并且提供了好用的 API 來處理與數據庫的交互,讓開發者專注 App 的開發。下面將從以下幾個方面來學習 DBFlow 數據庫框架的使用,具體如下:

  1. DBFlow 的優勢
  2. 配置 DBFlow
  3. 創建數據庫
  4. 創建表
  5. 插入數據
  6. 刪除數據
  7. 更新數據
  8. 查詢數據
  9. 案例
DBFlow 的優勢

DBFlow 借鑒了一些其他優秀數據庫框架的特性,下面是 DBFlow 的優勢,具體如下:

  1. Extensibility(擴展性):對表類的繼承類沒有限制,可以是一個普通的 JavaBean,使用時為了方便推薦表類繼承 BaseModel 類你可以擴展不同包中的非模型類,并將它們用作數據庫表,此外,你可以將其他表的子類加入到 @Column 中,并且它們可以位于不同的包中。
  2. Speed(速度):該庫基于 Java 的注解處理器生成,使用它對運行時性能幾乎沒有任何影響(反射僅僅用于生數據庫模塊的生成),可以節省生成樣板代碼的時間,支持模型緩存(多主鍵模型),在可能的情況下比原生的 SQLite 速度要快,支持懶加載、@ForeignKey、@OneToMany等使得查詢更有效率。
  3. SQLite Query Flow(SQLite查詢流):DBFlow 的查詢盡可能的貼近原生 SQLite 查詢,如:
select(name, screenSize).from(Android.class).where(name.is("Nexus 5x")).and(version.is(6.0)).querySingle()
  1. Open Source(開源):DBFlow 時開源的,開源地址:Github
  2. Robust(健壯性):支持 Trigger, ModelView, Index, Migration 以及內置的管理數據庫的方式, 此外,還支持 SQLCipher, RXJava 等
  3. Multiple Databases, Multiple Modules(多數據庫、多模型):無縫支持多數據庫文件以及使用 DBFlow 的其他依賴中的數據庫模型
  4. Built On SQLite(基于 SQLite):SQLite 是世界上使用最廣泛的數據庫引擎,它不僅限于某個平臺。
配置 DBFlow

因為 DBFlow 任然不是官方發布的,你需要在項目的 build.gradle 文件中進行如下配置,具體如下:

allprojects {
    repositories {
        jcenter()
        maven { url "https://jitpack.io" }
    }
}

然后,在 Module 對應的 build.gradle 文件中添加依賴,具體如下:

//為了方便可使用 def 關鍵字定義版本號
def dbFlow_version = "4.2.4"
dependencies {
    //...
    annotationProcessor "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}"
}

上面代碼中的依賴只是針對于 Java,如果你要使用 Kotlin、RxJava 等要配置相對應的依賴即可。

注意:升級新版本的 DBFlow 時,一定要刪除舊版本的依賴,因為新舊版本的注解處理器可能不同,如果未移除舊版本,將會報如下錯誤,具體如下:

java.lang.NoSuchMethodError: com.raizlabs.android.dbflow.annotation.Table.tableName()Ljava/lang/String

然后,自定義 Application ,在相應的 onCreate() 方法中初始化 DBFlow,具體如下:

/**
 * 自定義Application
 * @author jzman
 * create at 2018/4/16 0016 17:28
 */
public class MyApplication extends Application{
    @Override
    public void onCreate() {
        super.onCreate();
        //初始化DBFlow
        FlowManager.init(new FlowConfig.Builder(this).build());
        //設置日志顯示
        FlowLog.setMinimumLoggingLevel(FlowLog.Level.V);
    }
}

最后,在 AndroidManifest.xml 文件中使用自定義的 Application,具體如下:

<application
    android:name=".app.MyApplication"
    // ...
</application>

此時,DBFlow 就引入當前項目中咯。

創建數據庫

創建一個類并使用 @Database 注解來定義自己的數據庫,該類應該要定義數據庫的名稱和數據庫的版本,具體如下:

/**
 * MyDatabase
 * @author jzman
 * create at 2018/4/17 0017 9:08
 */
@Database(name = MyDatabase.NAME, version = MyDatabase.VERSION)
public class MyDatabase {
    //數據庫名稱
    public static final String NAME = "MyDatabase";
    //數據庫版本號
    public static final int VERSION = 1;
}

注意:如果以后要修改任意表的結構,為避免與舊版本數據庫沖突一定要修改版本號,且保證版本號只升不降。

創建表

在已經創建好數據庫的前提下就可以創建表了,表的模型類一般需要繼承 BaseModel,并為模型類中的每個字段添加 @Column 注解,該注解將映射模型類的字段到對應表中的列,定義一張表具體如下:

/**
 * NoteTable.java
 * @author jzman
 * create at 2018/4/17 0017 9:54
 */
@Table(database = MyDatabase.class)
public class NoteTable extends BaseModel {
    @Column
    @PrimaryKey
    int id;
    @Column
    private String title;
    @Column
    private String date;
    @Column
    private String content;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

注意:在一張表中至少必須定義一個字段作為主鍵(primary key),如果模型類中某個字段是私有的,一定要定義相應的 getter、setter 方法,否則會在創建表的環節失敗,表的命名要使用駝峰命名法,否則可能會出現如此下問題:

java.lang.IllegalArgumentException: expected type but was null
插入數據

使用 DBFlow 插入數據常用的有二種方式,具體如下:

  1. model.insert()
  2. SQLite.insert()

前者用于單個模型類對象的的插入,創建完具體的對象后,調用 model.insert() 即可插入該對象所對應的記錄;后者使用 SQLite Wrapper Language 來插入數據,類似于原生的 insert 語句,支持多列數據的插入,使用起來比較方便,具體參考如下:

/**
 * 插入數據
 * @param model
 */
public void inseartData(NoteBean model){
    //1.model,insert()
    model.setTitle("title");
    model.setDate("2018-04-17");
    model.setContent("content");
    model.insert();
    //2.SQLite.insert()
    SQLite.insert(NoteBean.class)
            .columns(NoteBean_Table.title,NoteBean_Table.date,NoteBean_Table.content)
            .values("title","2018-04-17","content")
            .execute();
}
刪除數據

使用 DBFlow 刪除數據常用的有二種方式,具體如下:

  1. model.delete():刪除某條記錄
  2. SQLite.delete():根據條件刪除

前者用于單個模型類對象的的刪除,創建完具體的對象后,調用 model.delete() 即可刪除該對象所對應的記錄;后者使用 SQLite Wrapper Language 來條件刪除數據,類似于原生的 delete 語句,使用起來比較方便,具體參考如下:

/**
 * 刪除數據
 * @param model
 */
public void deleteData(NoteBean model){
    //1.model.delete()
    model.delete();
    //2.SQLite.delete()
    SQLite.delete(NoteBean.class)
            .where(NoteBean_Table.title.is("title"))
            .and(NoteBean_Table.id.is(10))
            .async()
            .execute();
    //刪除整張表
    Delete.table(NoteBean.class);
    //刪除多張表
    Delete.table(NoteBean.class,NoteBean1.class);
}
更新數據

使用 DBFlow 刪除數據常用的有二種方式,具體如下:

  1. model.update():更新某條記錄
  2. SQLite.update():根據條件更新某條記錄

前者用于單個模型類對象的的更新,創建完具體的對象后,調用 model.update() 即可更新該對象所對應的記錄;后者使用 SQLite Wrapper Language 來條件刪除數據,類似于原生的 update 語句,使用起來比較方便,具體參考如下:

/**
 * 更新數據
 * @param model
 */
public void updateData(NoteBean model) {
    //1.model.update()
    model.update();
    //2.SQLite.update()
    SQLite.update(NoteBean.class)
            .set(NoteBean_Table.title.eq("title"),
                    NoteBean_Table.content.eq("content"))
            .where(NoteBean_Table.id.is(10))
            .async()
            .execute();
}
查詢數據

查詢使用 SQLite.select() 方法,查詢還有許多可以作為條件的關鍵字,這里就不在贅述了,下面是一個開發者做常用的查詢,具體參考如下:

/**
 * 查詢數據
 */
public List<NoteBean> queryData(){
    //根據條件查詢
    List<NoteBean> noteBeans = SQLite.select()
            .from(NoteBean.class)
            .where(NoteBean_Table.title.is("title"))
            .queryList();
    return noteBeans;
}

注意:對于插入、更新操作可以使用 model.save() 方法。

案例

上文中介紹了 DBFlow 的配置以及增刪改查等基本操作,DbFlow 還有其他比較高級的用法,比如使用 Transactions 來進行數據的安全操作等,下面寫一個簡單的案例來結束對 DBFlow 的學習,具體效果如下:

Android數據庫框架DBFlow的使用

更多關于 DBFlow 的知識請參考 DBFlow 的 GitBook 。

如果覺得對自己有幫助,可以關注微信公眾號:jzman-blog,一起交流學習。

Android數據庫框架DBFlow的使用

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

隆化县| 固始县| 精河县| 确山县| 固原市| 资阳市| 南召县| 彩票| 新丰县| 临安市| 喀什市| 赤壁市| 航空| 辽宁省| 南川市| 疏附县| 池州市| 广河县| 高邑县| 孟津县| 通许县| 苍山县| 三明市| 邓州市| 石首市| 虞城县| 苏州市| 淮阳县| 海盐县| 浦江县| 大兴区| 元朗区| 梁平县| 建平县| 通渭县| 新宁县| 海伦市| 雅安市| 保定市| 武胜县| 收藏|