Привет! Как разработчик ты когда-нибудь столкнешься с задачей, когда нужно хранить большое количество изменяемых данных. В этом гайде мы рассмотрим решение от Google — Room. Мы ознакомимся с основными компонентами библиотеки и разберем простой пример ее использования.

немного теории

Для хранения данных, разработчик может использовать: Files, SharedPreferences, SQLite, Resources/Assets.

Сегодня мы будем рассматривать SQLite

Room — это библиотека от Google, которая представляет собой высокоуровневую абстракцию над SQLite. Работа с SQLite напрямую может быть очень сложной. SQLite требует написания большого количества шаблонного кода для выполнения простых операций, которые в Room выполняются по щелчку пальцев: таких например как создание таблиц, добавление, обновление и удаление данных. Room упрощает работу с базой данных, предоставляя удобный API для выполнения CRUD- операций.

Основные компоненты Room:

  1. Entity. Класс представляющий таблицу в базе данных, для того, чтобы обозначить класс как сущность, используется аннотация @Entity
  2. DAO (Data Access Object): Интерфейс, определяющий методы для доступа к базе данных, используется аннотация @DAO
  3. Database: Абстрактный класс, представляющий базу данных, расширяет RoomDatabase и содержит список сущностей и DAO. Для определения этого класс используется аннотация @Database.

преимущества использования Room:

  1. Проверка SQL-запросов во время компиляции: Room проверяет правильность SQL-запросов на этапе компиляции, что помогает избежать ошибок во время выполнения.
  2. Меньше шаблонного кода: Room генерирует большую часть кода для работы с базой данных, что позволяет разработчикам сосредоточиться на бизнес-логике.
  3. Легкая интеграция с другими компонентами Android: Room хорошо работает с LiveData, ViewModel и другими компонентами архитектуры Android.

практический пример:

давайте создадим простое приложение для хранения списка задач (to-do list) с использованием Room.

⚠️ в примере избегается использование корутин, рыксы, архитектурных компонентов андроид(ViewModel, LiveData) для того чтобы сделать пример максимально понятливым.

шарк 0: добавляем зависимости

Сначала добавим необходимые зависимости в проект, как добавить необходимые зависимости смотрим тут: тык

шарк 1: Создание Entity

Создадим класс Task, который будет представлять нашу сущность: