ObjectBox[二] 教程:如何开始使用ObjectBox
ObjectBox[六] 数据监听和RX(Data Observers and Reactive Extensions)
ObjectBox[七] 支持LiveData(Android体系结构组件)
ObjectBox[十二] Meta Model, IDs, and UIDs
ObjectBox是一个超级快速的直接保存对象的移动数据库。它可以让你避免许多重复的操作,并提供简单的API操作数据。
为了在你的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类 是一个基本类。如前所述,您可以通过BoxStore.boxFor()获取Box单例 。Box单例使您可以访问特定类型的对象。例如,如果您有 Customer 和 Order 实体,则需要两个Box对象与其进行交互:
Box<Customer> customerBox = boxStore.boxFor(Customer.class);
Box<Order> orderBox = boxStore.boxFor(Order.class);
这些是Box类提供的一些操作:
写入一个对象,它会覆盖数据库中具有相同Id的对象。换句话说,使用 put 来插入或更新对象。put返回值为该对象在数据库中的Id。各种 put 重载方法支持放置多个对象,方便快捷。
参数为Id,就可以获取数据库中该Id的对象。要获取某个类型的所有对象,请使用 getAll 。
删除: 删除该对象。有多个重载方法删除多个实体, removeAll 删除一个类型的所有对象。
返回Box存储的对象的数量
返回query builder。查看查询的详细信息。
有关Box类中可用方法的完整列表,请检查其JavaDoc。
对象必须有一个long
类型的ID(注解为@Id)。当然也可以使用包装类java.lang.Long
,但是我们不建议这么做,因为long
在ObjectBox 中非常的高效。
如果您的应用程序中id是其他类型(例如由服务器提供的字符串UID),则可以将它们设置为标准属性(例如String uid),并使用query查询uid来得到实体。
对象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提供强大的事务处理功能,但对于许多应用程序来说,仅仅使用事务的一些基本用法就足够了。
欲了解更多详情,请查阅事务文档。
DaoCompat是一个适配器,为ObjectBox提供了一个类似于API的greenDAO。它使得从greenDAO切换到ObjectBox变得简单。看看文档和 例子。如果您有任何疑问,请联系我们!