ObjectBox的使用

添加依赖

在整个项目的build.gradle里添加

buildscript {
    ext.objectboxVersion = '2.3.4'
    repositories {
        jcenter()
    }
    dependencies {
        // Android Gradle Plugin 3.0.0 or later supported
        classpath 'com.android.tools.build:gradle:3.3.2'
        classpath "io.objectbox:objectbox-gradle-plugin:$objectboxVersion"
    }
}

在app的build.gradle里添加

如果是kotlin

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt' // Required for annotation processing.
apply plugin: 'io.objectbox' // Apply last.

如果是java

apply plugin: 'com.android.application'
apply plugin: 'io.objectbox' // Apply last.

好了,依赖加完了

添加初始化代码

添加初始化代码:

kotlin, 可以把这个类放到自定义的app中,也可以单独一个类

object ObjectBox {
    lateinit var boxStore: BoxStore
        private set

    fun init(context: Context) {
        boxStore = MyObjectBox.builder()
                .androidContext(context.applicationContext)
                .build()
    }
}

java

public class ObjectBox {
    private static BoxStore boxStore;

    public static void init(Context context) {
        boxStore = MyObjectBox.builder()
                .androidContext(context.getApplicationContext())
                .build();
    }

    public static BoxStore get() { return boxStore; }
}

这里的MyObjectBox是编译自动生成的。如果编译之后没有生成,可以先按照下面的步骤添加Entity类,然后再编译,这样应该就可以生成了。

然后在自定义的application中调用初始化

kotlin:

class ExampleApp : Application() {
    override fun onCreate() {
        super.onCreate()
        ObjectBox.init(this)
    }
}

java:

public class ExampleApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        ObjectBox.init(this);
    }
}

接下来就可以使用了:

val userBox: Box = ObjectBox.boxStore.boxFor()

上面部分的参考文档:https://docs.objectbox.io/getting-started

开始使用

添加entity

// User.kt
@Entity
data class User(
        @Id var id: Long = 0,
        var name: String? = null
)

几个注意的点:

  • 类上面可以打@Entity,如果是基类则打@BaseEntity
  • 一定要有一个@Id,类型为Long的属性,用于自增属性。
  • kotlin中的data class一定要有默认值,不然可能会找不到默认的构造方法。
  • 如果某个字段不想序列化到数据库中可以打上:@Transient标签,从kotlin里或者objectBox中导入的都可以。

增加:

App.ObjectBox.boxStore.boxFor().put(project)

查找:

App.ObjectBox.boxStore.boxFor()
        .query()
        .equal(Mark_.projectId, projectId)
        .build()
        .find()

查找并且删除:

val box = App.ObjectBox.boxStore.boxFor()
box.query().equal(Mark_.projectId, projectId).build().remove()

query的参考文档:https://docs.objectbox.io/queries

你可能感兴趣的:(ObjectBox的使用)