如果您熟悉greenDAO或EventBus之类的库,则可能听说过创建它们的公司: greenrobot 。 如果没有,我建议将它们检出。 简而言之,他们为应用程序开发人员构建了高质量的开源库。
最近,他们推出了一个名为ObjectBox的新库。 它用于帮助管理应用程序的本地数据存储。 他们的旧库greenDAO达到了相同的目的,但是ObjectBox是他们在本地存储解决方案中的下一步。 最大的区别是ObjectBox根本不使用SQL。
入门
要开始使用它,您可以查看他们的gradle设置 。 设置gradle后,该库就易于使用。 只需照常创建数据模型类,然后添加注释@Entity
。 请参阅以下示例:
@Entity
public class Animal {
@Id(assignable = true)
private long id;
private String name;
private boolean flying;
private boolean swimming;
private boolean walking;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isFlying() {
return flying;
}
public void setFlying(boolean flying) {
this.flying = flying;
}
public boolean isSwimming() {
return swimming;
}
public void setSwimming(boolean swimming) {
this.swimming = swimming;
}
public boolean isWalking() {
return walking;
}
public void setWalking(boolean walking) {
this.walking = walking;
}
}
ObjectBox需要访问您的类的属性,因此您需要创建适当的setter和getter方法。 另外,您可以删除private
修饰符,ObjectBox的生成的类将直接访问它们。
现在,您已经设置了数据模型,接下来需要初始化数据库。 我更喜欢在Application
类中执行此操作,但是如果愿意,您可以设置自己的单例或使用Dagger注入。 我的应用程序类如下所示:
public class App extends Application {
private static App sApp;
private BoxStore mBoxStore;
@Override
public void onCreate() {
super.onCreate();
sApp = this;
mBoxStore = MyObjectBox.builder().androidContext(App.this).build();
}
public static App getApp() {
return sApp;
}
public BoxStore getBoxStore() {
return mBoxStore;
}
}
欺诈
现在我有了数据库设置,现在可以使用BoxStore类访问它了。 它们具有boxes
,而不是典型的SQL tables
。 这是盒子的一些用法示例:
BoxStore boxStore = App.getApp().getBoxStore();
Box animalBox = boxStore.boxFor(Animal.class);
// loads all animals
List animals = animalBox.getAll();
// find a specific animal in the database
long myDogId = 12;
Animal myDog = animalBox.get(myDogId);
// insert an animal into the database
animalBox.put(newAnimal);
// update an animal
myDog.setSwimming(true);
animalBox.put(myDog);
//query for all the flying animals
List flyingAnimals = animalBox.query().equal(Animal_.isFlying, true).build().find();
//delete all flying animals from the database
animalBox.remove(flyingAnimals);
这些是基本CRUD操作的简单示例。 您也可以执行更复杂的查询,而不必编写令人困惑的SQL语句。 ObjectBox使用流利的API创建查询,因此链接条件容易理解。 要了解有关编写查询的更多信息,请查看其文档 。
关系
像大多数其他数据库一样,ObjectBox也支持Relationships 。 它支持一对一,一对多关系和多对多关系。 这是一对多关系的示例:
@Entity
public class Zoo {
@Id
private long id;
// a Zoo can have many Animals
@Backlink
ToMany animals;
...
}
@Entity
public class Animal {
@Id(assignable = true)
private long id;
private String name;
private boolean flying;
private boolean swimming;
private boolean walking;
// an Animal belongs to one Zoo
ToOne zoo;
...
}
这定义了具有许多动物的动物园与属于一个动物园的动物之间的关系。 当前,您必须使关系至少对ObjectBox私有包装。
要修改这些关系或访问它们,它看起来像这样:
Zoo myZoo = new Zoo();
Animal elephant = new Animal();
Animal giraffe = new Animal();
// To-one relation: Set the Zoo that an animal belongs to and save it to the database
elephant.zoo.setTarget(myZoo);
animalBox.put(elephant);
// To-one relation: Get the Zoo that an animal belongs to
Zoo elephantZoo = elephant.zoo.getTarget();
// To-many relation: Add Animals to the Zoo and save it to the database
myZoo.animals.add(elephant);
myZoo.animals.add(giraffe);
zooBox.put(myZoo);
// To-many relation: Get Animals that belongs to a Zoo
List zooAnimals = myZoo.animals;
移居
与其他数据库库(包括其自己的greenDAO)不同,迁移几乎是完全自动的。 因此,您不必担心管理每个架构版本。
例如,如果您添加新属性或删除属性,则不需要迁移代码。 就迁移而言,仅需要考虑两种情况。 重命名属性或类,并更改属性类型。 它们包括关于如何处理这些案件documenation 这里 。 但是,在大多数情况下,迁移不需要任何工作。
包起来
ObjectBox具有更多功能,例如事务 , 数据库索引 , Kotlin支持 , 反应性扩展 ,并且清单还在继续。 但是,这篇文章应该使您对greenrobot对该库采取的方法有一个很好的了解。
在撰写本文时,ObjectBox刚从beta版本1.0出来。 尽管他们仍在研究某些问题和新功能,但我认为这是一个很棒的库,强烈建议您尝试一下。 要了解更多信息,可以在这里访问他们的网站: http : //objectbox.io/ 。
翻译自: https://www.javacodegeeks.com/2017/09/objectbox-modern-easy-use-android-database.html