Введение

Локальное хранилище данных имеет решающее значение для многих приложений Android, позволяя им эффективно хранить и извлекать данные. В этом руководстве мы рассмотрим Room  —  мощную библиотеку, которая упрощает управление базами данных в приложениях для Android. Мы расскажем обо всем, начиная с настройки Room и заканчивая выполнением операций с базами данных и обработкой миграций.

Структура использования базы данных Room в проекте android MVVM

Раздел 1. Настройка базы данных Room

Шаг 1. Добавление зависимостей

Откройте файл уровня модуля приложения `build.gradle` и добавьте необходимые зависимости для Room и корутин Kotlin (для асинхронных операций):

gradle
dependencies {
def roomVersion = "2.4.0" // Проверьте наличие последней версии
implementation "androidx.room:room-runtime:$roomVersion"
kapt "androidx.room:room-compiler:$roomVersion"
implementation "androidx.room:room-ktx:$roomVersion"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2" // Добавьте зависимость для корутины
}

Примечание: если последние версии Android и Jetpack Compose работают с ошибками, возможно, потребуется добавить ksp() {обработка символов Kotlin}.

Добавьте указанные ниже зависимости и плагин в build.gradle (уровень модуля).

plugins {
.
.
id "com.google.devtools.ksp"
}

.
.
.

dependencies{
// Зависимость Room
val room_version = "2.5.2"

implementation("androidx.room:room-ktx:$room_version")
// Чтобы использовать инструмент для обработки аннотаций Kotlin (kapt)
ksp("androidx.room:room-compiler:$room_version")
}

Добавьте путь к классу ksp в build.gradle (уровень приложения).

plugins {
id "com.google.devtools.ksp" version "1.8.10-1.0.9" apply false
}

Шаг 2. Создание класса Entity (сущности)

Определите класс Entity с аннотациями для представления таблицы в базе данных. Например, создадим сущность `User` (ее можно рассматривать как таблицу, в которой каждый элемент данных  —  это имя столбца):

import androidx.room.Entity
import androidx.room.PrimaryKey

@Entity(tableName = "users")
data class User(
@PrimaryKey(autoGenerate = true) val id: Long = 0,
val username: String,
val email: String
)

Шаг 3. Создание интерфейса DAO (Data Access Object)

Создайте интерфейс DAO для определения операций с базой данных. Мы создадим `UserDao`:

import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query

@Dao
interface UserDao {

@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertUser(user: User)

@Query("SELECT * FROM users")
suspend fun getAllUsers(): List<User>
}

Шаг 4. Определение класса базы данных

Создайте абстрактный класс, расширяющий `RoomDatabase`, чтобы определить экземпляр базы данных и включить в него сущности и DAO:

import androidx.room.Database
import androidx.room.RoomDatabase

@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}

Шаг 5. Инициализация экземпляра базы данных

В классе `Application` или в соответствующей точке входа инициализируйте экземпляр базы данных Room:

import android.app.Application
import androidx.room.Room

class MyApp : Application() {

companion object {
lateinit var database: AppDatabase
}

override fun onCreate() {
super.onCreate()
database = Room.databaseBuilder(
applicationContext,
AppDatabase::class.java,
"my_database"
).build()
}
}

Раздел 2. Выполнение операций с базой данных

Шаг 1. Вставьте данные

Чтобы вставить пользователя в базу данных, можно использовать метод `insertUser`, определенный в `UserDao`:

val newUser = User(username = "JohnDoe", email = "[email protected]")
MyApp.database.userDao().insertUser(newUser)

Шаг 2. Получите данные

Чтобы получить всех пользователей из базы данных, используйте метод `getAllUsers` из `UserDao`:

val userList: List<User> = MyApp.database.userDao().getAllUsers()

Ознакомьтесь с демо-проектом для настройки внедряемого объекта базы данных Room.

Заключение

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

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

База данных Room очень упрощает процесс управления локальными данными в Android-приложении. Удачи в работе!

Читайте также:

Читайте нас в Telegram, VK и Дзен


Перевод статьи Amit Raikwar: Getting Started with Room Database in Android

Предыдущая статьяЗабудьте про pip  —  используйте uv
Следующая статьяAngular и Wiz: вместе лучше