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函数这一块遇到了点问题,所以暂时搁笔,后续会专门开一篇来介绍这三大类查询方法。
- ObjectBox入门
- ObjectBox入门
- ObjectBox入门(续)
- ObjectBox
- ObjectBox[二] 教程:如何开始使用ObjectBox
- ObjectBox[一] 特性
- ObjectBox[八] 关系
- ObjectBox[九] 数据模型变更
- ObjectBox[十] 自定义类型
- ObjectBox升级的坑
- ObjectBox[十一] 事务
- ObjectBox[十三] 数据调试
- ObjectBox初识与依赖配置
- android sqlite && greendao objectbox [记录]
- ObjectBox[五]基本操作:查询
- ObjectBox[三] 教程:安装和基础
- ObjectBox[七] 支持LiveData(Android体系结构组件)
- ObjectBox[十二] Meta Model, IDs, and UIDs
- Android 2.0蓝牙使用全解析
- Lock&Condition实现线程同步通信
- Hello Blog
- Spring
- mybatis中使用包装对象
- ObjectBox入门
- 基于Anaconda的tensorboard可视化
- 图片旋转
- Android中的串口通讯全解析
- CentOS 6.0/7.0关闭默认防火墙启用iptables防火墙
- IO 输入输出流
- java ==和equals区别
- Java BitSet使用场景和示例
- 关于this指针指向的知识回顾