ObjectBox入门

创建数据库

建立实体类

与GreenDao一样,建立与数据库中某表对应的实体类,代码如下:

@Entity
public class Person {
    @Id
    private long id;//必须有一个long类型的
    private String name;
    private String address;

    //省略get/set方法--不可少
    ...
}

然后点击“Build”–“Make Project”。
如果出现报错,那就查看是不是以下的原因:
1. 属性定义为private而没有相应的get/set方法;
2. 属性变量的命名问题,例如上述的name改成mName,自动生成的get方法是getName(),在Make之后会报下面的错误:

ObjectBox的初始化

可能有的小伙伴会奇怪为什么第一步不是直接进行ObjectBox的初始化,在官方的文档中有这么一句话:

Next go ahead and build the project, for example by using “Build > Make project” in Android Studio. This triggers ObjectBox to generate some classes, like MyObjectBox.java, and some other classes used by ObjectBox internally.

大概的意思就是说,ObjectBox中的有些类(例如MyObjectBox类)需要在Make的操作之后才会自动生成。
接下来就去BaseApplication类中进行初始化操作,同时暴露出获取BoxStore的接口(其实这一步操作类似于以前用DbHelper去打开数据库一样),代码如下:

public class BaseApplication extends Application {
    private static BaseApplication sInstance;
    private BoxStore mBoxStore;

    public static BaseApplication getInstance() {
        return SingletonHolder.INSTANCE;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        init();
    }

    private void init() {
        sInstance = this;
        mBoxStore = MyObjectBox.builder().androidContext(this).build();
    }

    public BoxStore getBoxStore() {
        return mBoxStore;
    }

    private static class SingletonHolder {
        private static final BaseApplication INSTANCE = sInstance;
    }
}

别忘了去,同时记得去manifest文件中修改相关的代码:



CRUD

获取表

要进行CRUD的操作,肯定得先确定去操作哪个表的数据。
例如我们要操作上面中的Person类的表–Box< Person>,可以用下面的代码获取到这个表的实例:

public class MainActivity extends AppCompatActivity {
    private Box mPersonBox;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);
        initView();
        initData();

    }

    private void initData() {
        mPersonBox = BaseApplication.getInstance().getBoxStore().boxFor(Person.class);
        //init ori data
        ...
    }
    ...
}

增加

如果你在Person类中生成了构造,那就按如下的方式进行C操作:

Person person = new Person(0L, "China", "HanMeiMei");
mPersonBox.put(person);

如果Person类仅有默认的无参构造,那么代码如下:

 Person person=new Person();
 person.setAddress("China");
 person.setName("HanMeiMei");
 mPersonBox.put(person);

对比下上述的2种方法,我们发现,在有构造的时候id我们始终填写的是0L;在无参的情况下,我们并没手动的去设置id的值。但是在我们查询所有数据的时候,我们会发现,每个Person的id都不一样,而且是自增长的。关于@Id这个注解会在后续与其他注解一并进行说明,此处知道有这个需要注意的地方就行。

删除

ObjectBox的删除操作有好几个,下面是删除操作的重载方法:

removeAll() :删除所有
remove(Person object) :删除某一个Person
remove(Collection objects) :删除某个Person的集合
remove(long id) :删除某个Person
remove(long… ids) :删除多个Person
remove(Person…objects) :删除多个Person
removeByKeys(Collection ids) :根据ids删除对应的Person

代码仅做简单的展示(删除第一个):

 mPersonBox.remove(1);

修改

要修改,肯定要先获取待修改的Person对象,复杂的查询操作会在后续进行说明,这里并不做重点,仅以数据库的第一个Person展示修改操作的代码:

private void doU() {
    Person person = mPersonBox.getAll().get(0);
    person.setName("LiLei");//update the name 
    mPersonBox.put(person);
}

查询

不论是GreenDao,Realm还是ObjectBox,查询操作在CRUD里面总是最复杂的。
而在ObjectBox里面,查询的方法有3大类:

get
find
query

关闭表操作

通过下面的代码可以关闭当前表的操作:

mPersonBox.query().close();

最后

本来打算把查询这一部分也在这个章节写完的,但由于这一部分内容较多,每个重载函数我都得去测试一遍,而且在find函数这一块遇到了点问题,所以暂时搁笔,后续会专门开一篇来介绍这三大类查询方法。

你可能感兴趣的:(开源框架)