Узнайте, как использовать Room для сохранения данных в локальной базе данных.

В этом рассказе вы познакомитесь с основами Room в Android. Обратите внимание: в этой истории я предполагаю, что у вас есть некоторые знания в области разработки Android и Kotlin, а это означает, что я не буду здесь объяснять простые языковые вещи.

Примечание

В этой истории мы не будем создавать пример приложения. Я просто покажу несколько отрывков с их пояснениями.

Если вы хотите создать пример приложения для Android с использованием Room и других сложных концепций, вам придется подождать. Я планирую написать об этом рассказ.

Объявление

Я только что немного обновил дизайн изображения рассказа, теперь он стал немного темнее, но ярче, и теперь изображение темы, о которой рассказывается.

Хотел бы получить отзывы об изображении истории!

Давайте начнем!

Что такое комната?

Room - это часть компонентов архитектуры Android, которая обеспечивает уровень абстракции над SQLite, что обеспечивает более надежный доступ к базе данных, при этом обеспечивая полную мощность SQLite.

По сути, это просто улучшенная версия SQLite, специально улучшенная для Android.

Вот что говорится в официальной документации Android о Room:

Библиотека сохраняемости Room обеспечивает уровень абстракции над SQLite, чтобы обеспечить свободный доступ к базе данных, используя всю мощь SQLite. В частности, Room предоставляет следующие преимущества:

- Проверка SQL-запросов во время компиляции.

- Удобные аннотации, сводящие к минимуму повторяющийся и подверженный ошибкам шаблонный код.

- Оптимизированные пути миграции базы данных.

Из-за этих соображений мы настоятельно рекомендуем использовать Room вместо непосредственного использования API SQLite.

Зависимости комнат и как это работает

Хорошо, теперь, когда мы знаем, что такое Room, давайте посмотрим, как мы добавляем ее в наш проект и как она работает.

Зависимости от комнат

Первые implementation и annotationProcessor необходимы для использования Room. Необязательные зависимости не всегда требуются, и вы должны добавлять их только в том случае, если вам действительно нужны эти функции.

Как работает комната

Три основных компонента Room:

  • Сущность: представляет таблицу в базе данных комнат. Он должен быть помечен @Entity.
  • DAO: интерфейс, содержащий методы доступа к базе данных. Он помечен @Dao.
  • База данных: представляет базу данных. Это объект, который поддерживает соединение с базой данных SQLite, и все операции выполняются через него. Он помечен @Database.

Обратите внимание, что Room - это не ORM; вместо этого это целая библиотека, которая позволяет нам более легко создавать базы данных SQLite и управлять ими.

Используя аннотации, мы можем определять наши базы данных, таблицы и операции. Room автоматически переведет эти аннотации в инструкции и запросы SQLite для выполнения соответствующих операций в ядре базы данных.

Так выглядит архитектура помещения:

Реализация помещения

Теперь давайте посмотрим, как мы реализуем Room в нашем приложении.

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

Сущности

Давайте создадим Phone объект, чтобы увидеть, как мы создаем объекты в Room. Каждый экземпляр Phone представляет собой строку в phone таблице в базе данных приложения.

Довольно просто, правда?

По умолчанию Room будет использовать имя поля в качестве имени столбца. Но если вы хотите дать своему столбцу другое имя, вы можете использовать @ColumnInfo.

Я не думаю, что мне нужно объяснять, что @PrimaryKey, поскольку вы, вероятно, это знаете, если у вас есть немного знаний о базах данных.

А теперь перейдем к DAO.

DAO

Следующий код определяет DAO с именем PhoneDao. PhoneDao предоставляет методы, которые остальная часть приложения использует для взаимодействия с данными в phone таблице.

Обратите внимание на несколько моментов:

  • Все DAO должны быть аннотированы @Dao.
  • Функция, помеченная @Insert, @Update или @Delete, должна получить экземпляр желаемого класса в качестве параметра, который представляет объект, который мы хотим вставить, обновить или удалить соответственно.
  • В случае операций вставки или обновления мы можем использовать свойство onConflict, чтобы указать, что делать, когда возникает конфликт при выполнении операции. Доступны следующие стратегии: REPLACE , ABORT, FAIL, IGNORE и ROLLBACK.
  • Если мы хотим получить конкретную информацию от одной или нескольких сущностей, мы можем аннотировать функцию с помощью @Query и предоставить сценарий SQL в качестве параметра.

Теперь давайте посмотрим, как мы на самом деле создаем нашу базу данных.

База данных

Опять же, здесь есть кое-что, на что стоит обратить внимание:

  • Это абстрактный класс, который должен расширяться RoomDatabase.
  • Он должен быть аннотирован @Database, и он получает список сущностей со всеми классами, составляющими базу данных, и все эти классы должны быть аннотированы @Entity). Мы также должны предоставить версию базы данных.
  • Мы должны объявить абстрактную функцию для каждой из сущностей, включенных в аннотацию @Database. Эта функция должна возвращать соответствующий DAO, который является классом, помеченным @Dao.

Использование комнаты

Самая сложная часть сделана. Все, что осталось сделать, это просто использовать Room в любом месте нашего приложения.

Вот как вы создаете экземпляр своей базы данных Room. Довольно просто, правда?

И как мы на самом деле его используем? Что ж, это тоже довольно просто.

Вот и все. Теперь у вас есть полностью функционирующая база данных Room, готовая к расширению!

Круто, не правда ли?

Последние мысли

Вы только что узнали, как добавить Room в ваше приложение и как на самом деле его использовать.

Надеюсь, эта история вам помогла. Я хотел бы услышать, нравится ли вам Room и планируете ли вы использовать его в своих будущих проектах.

Вот и все. Спасибо, что прочитали этот рассказ!

Если вам понравилась история, не забудьте аплодировать ей! И не стесняйтесь спрашивать меня о чем угодно.

Подпишись на меня в Твиттере:



Поддержите меня на Patreon: