Керівництво по використанню orm dbflow в android-додатку, java-help

Більше року тому я написав статтю «Огляд кращої AndroidORM - ActiveAndroid«. Я б так і продовжив використовувати цю чудову ORM, якби кілька АЛЕ:

2) Неможливість unit-тестування (викидає виключення) і неможливість це виправити (див. Пункт 1)

3) Проблеми з новими версіями Android

4) Баги, які я не помітив і які можуть вилізти пізніше, коли буде вже пізно

У зв'язку з цим я вирішив змінити ORM на що-небудь свіжіше і трохи краще. Мені радили багато різних бібліотек, але я все ніяк не міг визначитися з «найкращою». Спочатку мій вибір припав на squidb. але від неї теж довелося відмовитися через складність її використання. Та й кодогенерацію я не дуже люблю. Зрештою я знайшов ту саму бібліотеку, яка мені була потрібна - DBFlow.

невеликий огляд

Однією з проблем, з існуючих ORM-бібліотек є те, що вони використовують Java-рефлексію для визначення моделей баз даних, схем таблиць і відносин стовпців. DBFlow є однією з небагатьох бібліотек, яка спирається виключно на обробку анотацій для створення Java-коду, заснованого на базі SQLiteOpenHelper. Такий підхід призводить до збільшення продуктивності під час виконання, і в той же час позбавляє вас від необхідності писати багато шаблонного коду, як правило, необхідного для опису таблиць, виконання запити і т. Д.

підключення бібліотеки

Насамперед потрібно підключити плагін apt. прописавши наступні рядки в кореневому build.gradle файлі вашого проекту:

Також нам потрібно прописати репозиторій jitpack.io в блоці з allprojects -> repositories:

Далі в файлі app / build.gradle активуйте плагін android-apt і додайте DBFlow в список залежностей. Ми створимо окрему змінну для зберігання номера версії, щоб її було простіше змінювати в майбутньому:

Створення бази даних

визначення таблиць

Java-класи, які виступають в якості моделей повинні успадковуватися від BaseModel. Крім того в анотації ми повинні вказати базу даних, до якої відноситься таблиця. Тут ми покажемо, як створити таблиці для організацій і користувачів:

Ми дуже легко можемо пов'язати моделі за допомогою анотації ForeignKey. Значення saveForeignKeyModel означає оновлення зовнішнього ключа, при оновленні запису. В цьому випадку ми відключаємо цю функцію:

Використання бібліотеки Parceler

Якщо разом з DBFlow ви використовуєте бібліотеку Parceler. додайте до Вакша класу анотацію @Parcel (analyze =). В іншому випадку бібліотека Parceler спробує серіалізовать поля, пов'язані з класом BaseModel і викличе помилку Error: Parceler: Unable to find read / write generator for type. Щоб уникнути цієї проблеми, потрібно вказати, який саме клас в ланцюжку спадкування повинні бути досліджений:

ініціалізація DBFlow

Далі ми повинні ініціалізувати DBFlow в класі Application:

Змініть клас додатки в файлі AndroidManifest.xml:

створення записів

Для збереження запису в таблицю ми просто повинні викликати метод .save ():

читання записів

Читання записів також проводиться дуже легко:

оновлення записів

Повторний виклик методу save () у об'єкта оновить запис по первинному ключу.

видалення записів

Для видалення запису ми повинні викликати метод delete ():

виконання транзакцій

Також ви можете вставити в таблицю групу елементів, використовуючи клас ProcessModelTransaction:

міграції БД

Міграції визначаються шляхом створення класу міграції або шляхом розміщення валидного SQL-файлу в папку assets / migrations // вашого проекту. Нижче наведено приклад класу міграції:

Виправлення помилок

Клас моделі не знайдено

Так як DBFlow потрібно від обробки анотацій, іноді вам може знадобитися натиснути Build -> New Project для генерації вихідного коду.

Використання з GSON

Якщо ви збираєтеся використовувати DBFlow з бібліотекою Gson. ви можете отримати виняток StackOverflowError при спробі використовувати об'єкти Java. які успадковуються від BaseModel. Для того щоб уникнути цих проблем. необхідно виключити клас ModelAdapter. який представляє собою поле в класі BaseModel:

Потім потрібно створити користувальницький Gson Builder, щоб виключити цей клас:

Перейдіть сюди для отримання додаткової інформації.

Бібліотека на GitHub: DBFlow

Схожі статті