ObjectBox入门

来源:互联网 发布:遗传算法的基本原理 编辑:程序博客网 时间:2024/06/05 05:23

创建数据库

建立实体类

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

@Entitypublic 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文件中修改相关的代码:

<application    android:name=".base.BaseApplication"  ...</application>

CRUD

获取表

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

public class MainActivity extends AppCompatActivity {    private Box<Person> 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函数这一块遇到了点问题,所以暂时搁笔,后续会专门开一篇来介绍这三大类查询方法。

原创粉丝点击