Статьи

ObjectBox, современная и простая в использовании база данных Android

Если вы знакомы с такими библиотеками, как greenDAO или EventBus , возможно, вы слышали о компании, которая их создала: greenrobot . Если нет, я рекомендую проверить их. Одним словом, они создают высококачественные библиотеки с открытым исходным кодом для разработчиков приложений.

Недавно они выпустили новую библиотеку под названием ObjectBox . Он используется для управления локальным хранилищем данных вашего приложения. Их старая библиотека greenDAO служит той же цели, но ObjectBox — их следующий шаг в решениях для локальных хранилищ. Самая большая разница в том, что ObjectBox вообще не использует SQL.

Начиная

Чтобы начать использовать его, вы можете проверить их настройки gradle . После настройки Gradle библиотеку легко использовать. Просто создайте классы модели данных как обычно и добавьте аннотацию @Entity . Смотрите пример ниже:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
@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, если хотите. Мой класс приложения выглядит так:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
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;
    }
}

CRUD

Теперь, когда у меня есть настройка базы данных, я могу получить к ней доступ с помощью класса BoxStore . Вместо типичных tables SQL у них есть boxes . Вот несколько примеров использования коробки:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
BoxStore boxStore = App.getApp().getBoxStore();
Box<Animal> animalBox = boxStore.boxFor(Animal.class);
 
// loads all animals
List<Animal> 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<Animal> flyingAnimals = animalBox.query().equal(Animal_.isFlying, true).build().find();
 
//delete all flying animals from the database
animalBox.remove(flyingAnimals);

Это простые примеры основных операций CRUD . Вы также можете выполнять более сложные запросы без необходимости вводить в заблуждение операторы SQL. ObjectBox создает запросы с помощью свободного API, поэтому условия цепочки просты и понятны. Чтобы узнать больше о написании запросов, проверьте их документацию .

связи

Как и большинство других баз данных, ObjectBox поддерживает отношения . Он поддерживает отношения один-к-одному, отношения один-ко-многим и отношения многие-ко-многим. Вот пример того, как выглядит отношение один ко многим:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@Entity
public class Zoo {
 
    @Id
    private long id;
 
 
    // a Zoo can have many Animals
    @Backlink
    ToMany<Animal> 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> zoo;
   
    ...
}

Это определяет отношение между зоопарком, в котором есть много животных, и животным, которое принадлежит одному зоопарку. В настоящее время вы должны сделать отношения как минимум пакетными для ObjectBox.

Чтобы изменить эти отношения или получить к ним доступ, это выглядит так:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
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<Animal> zooAnimals = myZoo.animals;

Миграции

В отличие от других библиотек баз данных (включая их собственные greenDAO), миграции почти полностью автоматизированы. Так что вам не нужно беспокоиться об управлении каждой версией схемы.

Например, если вы добавляете новое свойство или удаляете свойство, код миграции не требуется. Есть только два случая, которые вам необходимо учитывать с точки зрения миграции. Переименование свойства или класса и изменение типа свойства. Они включают документацию о том, как обращаться с этими случаями здесь . В большинстве случаев, однако, не будет никакой работы, необходимой для миграции.

Заворачивать

ObjectBox имеет много других функций, таких как транзакции , индексы базы данных , поддержка Kotlin , реактивные расширения, и этот список можно продолжить. Но этот пост должен дать вам хорошее представление о подходе, принятом greenrobot с этой библиотекой.

На момент написания этой статьи ObjectBox только что вышел из бета-версии с версией 1.0. Хотя они все еще работают над некоторыми проблемами и новыми функциями, я думаю, что это отличная библиотека и очень рекомендую попробовать. Чтобы узнать больше об этом, вы можете проверить их веб-сайт здесь: http://objectbox.io/ .

Опубликовано на Java Code Geeks с разрешения Пирса Зайфмана, партнера нашей программы JCG. Смотрите оригинальную статью здесь: ObjectBox, современная и простая в использовании база данных Android

Мнения, высказанные участниками Java Code Geeks, являются их собственными.