ObjectBox[三] 教程:安装和基础

阎建中
2023-12-01

ObjectBox[一] 特性

ObjectBox[二] 教程:如何开始使用ObjectBox

ObjectBox[三] 教程:安装和基础

ObjectBox[四] 数据库持久化之实体注解

ObjectBox[五] 基本操作:查询

ObjectBox[六] 数据监听和RX(Data Observers and Reactive Extensions)

ObjectBox[七] 支持LiveData(Android体系结构组件)

ObjectBox[八] 关系

ObjectBox[九] 数据模型变更

ObjectBox[十] 自定义类型

ObjectBox[十一] 事务

ObjectBox[十二] Meta Model, IDs, and UIDs

ObjectBox[十三] 数据调试


ObjectBox是一个超级快速的直接保存对象的移动数据库。它可以让你避免许多重复的操作,并提供简单的API操作数据。

Gradle设置

为了在你的Android项目中使用ObjectBox,你需要如下设置:

// In your root build.gradle file:
buildscript {
    ext.objectboxVersion = '1.2.1'
    repositories {
        jcenter()
        maven { url "http://objectbox.net/beta-repo/" }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        classpath "io.objectbox:objectbox-gradle-plugin:$objectboxVersion"
    }
}

allprojects {
    repositories {
        jcenter()
        maven { url "http://objectbox.net/beta-repo/" }
    }
}

// In your (app) module build.gradle file:
apply plugin: 'com.android.application'
apply plugin: 'io.objectbox'

注意:要在普通Java项目中使用ObjectBox,安装程序会有所不同,请参阅示例项目build.gradle文件。

Gradle插件会自动添加依赖库,并配置一个注解处理器,在构建时生成代码和JSON数据对象。

然后编写实体(@Enter)并编译您的项目,例如在Android Studio中使用Build> Make Project。

如果库或注解处理器没有自动添加到依赖中,您可以手动添加它们。对于注解处理器,在Java中使用annotationProcessor关键字,如果项目使用Kotlin,则使用kapt关键字:

dependencies {
    // all below should be added automatically by the plugin

    compile "io.objectbox:objectbox-android:$objectboxVersion"
    // some useful Kotlin extension functions
    // compile "io.objectbox:objectbox-kotlin:$objectboxVersion"

    annotationProcessor "io.objectbox:objectbox-processor:$objectboxVersion"
    // When using Kotlin use kapt instead:
    // kapt "io.objectbox:objectbox-processor:$objectboxVersion"
}

可选配置
在您的app模块Gradle构建文件(您的实体所在的位置)中,您可以添加一些可选的配置。例如,你可以在调试模式切换为ObjectBox注解处理器(运行Gradle –info 可以看到Debug 输出信息):


// Using annotationProcessor (Java):
android {
    defaultConfig {
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [ 'objectbox.debug' : 'true' ]
            }
        }
    }
}
// Using kapt (Kotlin):
kapt {
    arguments {
        arg("objectbox.debug", true)
    }
}

其他注释处理器参数是:
objectbox.modelPath:改变JSON模型文件(“objectbox-models / default.json”)的默认位置。
objectbox.daoCompat:如果你想使用DAO compat(类似于greenDAO的API)设置为true。

核心类

一旦定义了至少一个实体并成功构建了项目,就可以在Android项目中开始使用ObjectBox。
以下核心类是ObjectBox的基本接口:
MyObjectBox:根据实体类自动生成,MyObjectBox提供一个builder 来获取BoxStore。
BoxStore:使用ObjectBox的入口。BoxStore是您的数据库的直接接口和管理Box。
Box:一个Box持续存在并用于查询实体。对于每个实体,都有一个Box(由BoxStore提供)。
实体:使用ObjectBox注释将对象类标记为可持久。

初始化

最后,初始化ObjectBox类的基本步骤:

// do this once, for example in your Application class
boxStore = MyObjectBox.builder().androidContext(App.this).build();
// do this in your activities/fragments to get hold of a Box
notesBox = ((App) getApplication()).getBoxStore().boxFor(Note.class);

该示例假定存在一个 Note 实体类。通过Box( NotesBox 类型会根据Note自动生成),我们可以调用notesBox 对Note数据进行操作。

Box基本操作

该Box类 是一个基本类。如前所述,您可以通过BoxStore.boxFor()获取Box单例 。Box单例使您可以访问特定类型的对象。例如,如果您有 Customer 和 Order 实体,则需要两个Box对象与其进行交互:

Box<Customer> customerBox = boxStore.boxFor(Customer.class);
Box<Order> orderBox = boxStore.boxFor(Order.class);

这些是Box类提供的一些操作:

put

写入一个对象,它会覆盖数据库中具有相同Id的对象。换句话说,使用 put 来插入或更新对象。put返回值为该对象在数据库中的Id。各种 put 重载方法支持放置多个对象,方便快捷。

get

参数为Id,就可以获取数据库中该Id的对象。要获取某个类型的所有对象,请使用 getAll 。

remove

删除: 删除该对象。有多个重载方法删除多个实体, removeAll 删除一个类型的所有对象。

count

返回Box存储的对象的数量

query

返回query builder。查看查询的详细信息。

有关Box类中可用方法的完整列表,请检查其JavaDoc。

对象Object IDs

对象必须有一个long类型的ID(注解为@Id)。当然也可以使用包装类java.lang.Long,但是我们不建议这么做,因为long在ObjectBox 中非常的高效。
如果您的应用程序中id是其他类型(例如由服务器提供的字符串UID),则可以将它们设置为标准属性(例如String uid),并使用query查询uid来得到实体。

特殊对象ID

对象ID可以是任何 长整型 值,但有两个例外:

  • ID为0的对象(如果ID是Long类型,则为 空)被认为是新的。插入ID为0的对象,数据库会分配一个新的ID。
  • 0xFFFFFFFFFFFFFFFF(在Java中为-1): 此值由ObjectBox保留供内部使用,可能不会被应用程序使用。

对象ID分配

默认情况下,对象ID由ObjectBox分配。对于每个新的对象,ObjectBox将分配一个未使用的ID,该ID高于当前在盒子中使用的最高ID值。例如,如果在一个Box中有两个对象ID 1和ID 100,则放置的下一个对象将被分配ID 101。

默认情况下,只有ObjectBox可以分配ID。如果您尝试使用的ID大于当前最高ID或更改ID,则ObjectBox会报错。

如果您需要自己分配ID,则可以将ID注释更改为 @Id(assignable = true) 。这将允许将一个对象Id有任何值,包括0。

事务

ObjectBox提供强大的事务处理功能,但对于许多应用程序来说,仅仅使用事务的一些基本用法就足够了。

  • 一个 put 运行一个隐含的事务。
  • 多个对象 首选list重载方法put( entities)
  • 对于循环中的大量数据库交互,请考虑显式事务,例如使用 runInTx()

欲了解更多详情,请查阅事务文档

有一个与greenDAO的应用程序?DaoCompat是给你的!

DaoCompat是一个适配器,为ObjectBox提供了一个类似于API的greenDAO。它使得从greenDAO切换到ObjectBox变得简单。看看文档例子。如果您有任何疑问,请联系我们!


原文:http://objectbox.io/documentation/introduction/

 类似资料: