Descripción general de Room en los componentes de la arquitectura de Android

Room es uno de los componentes de la arquitectura Jetpack en Android . Esto proporciona una capa abstracta sobre la base de datos SQLite para guardar y realizar operaciones en datos persistentes localmente. Google recomienda esto sobre la base de datos SQLite, aunque las API de SQLite son más poderosas, son de nivel bastante bajo, lo que requiere mucho tiempo y esfuerzo para usar. Pero Room hace que todo sea fácil y claro para crear una base de datos y realizar operaciones en ella.

¿Por qué usar Sala?

  • Guarde en caché las partes relevantes de los datos para que cuando el dispositivo del usuario esté desconectado, aún pueda navegar y ver el contenido sin conexión.
  • La verificación de consultas SQLite en tiempo de compilación evita que la aplicación se bloquee.
  • Las anotaciones que proporciona minimizan el código repetitivo.
  • Esto también proporciona una fácil integración con los otros componentes de la arquitectura como LiveData, LifecycleObserver, etc. Puede tomar codelab proporcionado por Google aquí .

Diferencia entre la habitación y SQLite

Habitación

SQLite 

No es necesario escribir consultas sin formato. Necesidad de escribir consultas en bruto.
Verificación de tiempo de compilación de consultas SQL. No, verificación repetitiva en tiempo de compilación de consultas SQL.
No es necesario convertir los datos a objetos Java. As Room asigna internamente los objetos de la base de datos a los objetos de Java. Necesita escribir consultas SQL para convertir los datos en objetos Java.
Esto apoya convenientemente la integración con otros componentes de Arquitectura. Esto necesita una gran cantidad de código de placa de caldera para integrarse con los otros componentes de arquitectura.
Room proporciona una forma más fácil de trabajar con LiveData y realizar las operaciones. SQLite no proporciona una forma directa de acceder a LiveData, necesita que se escriba un código externo para acceder a LiveData.
No es necesario cambiar el código cuando el esquema de la base de datos cambia. Esto necesita cambiar sus consultas cada vez que el esquema de la base de datos cambia.

Componentes principales de la habitación

  1. Clase de base de datos: proporciona el punto de acceso principal a la conexión subyacente para los datos persistentes de la aplicación. Y esto está anotado con @Database.
  2. Entidades de datos: esto representa todas las tablas de la base de datos existente. Y anotado con @Entity.
  3. DAO (Objetos de Acceso a Datos): Contiene métodos para realizar las operaciones en la base de datos. Y anotado con @Dao.

Habitación Biblioteca Arquitectura

A partir de la imagen a continuación, podemos concluir el funcionamiento de la base de datos de habitaciones, ya que la aplicación primero obtiene los objetos de acceso a datos (DAO) asociados con la base de datos de habitaciones existente. Después de obtener DAO s, a través de DAO s accede a las entidades de las tablas de la base de datos. Y luego puede realizar las operaciones en esas entidades y persistir los cambios en la base de datos.

Pasos para implementar Room Database en la aplicación de Android

Paso 1: crear un proyecto de actividad vacía

Paso 2: Agregar las dependencias requeridas

  • Agregue las siguientes dependencias al archivo gradle de nivel de aplicación. Al ir a ProjectName -> src -> build.gradle.

// room_version puede variar

def habitación_versión = “2.3.0”

implementación “androidx.room:room-runtime:$room_version”

kapt «androidx.room:room-compiler:$room_version»

implementación “androidx.room:room-ktx:$room_version”

testImplementation «androidx.room:room-testing:$room_version»

Ahora creando los componentes de Room uno por uno:

Nota: aquí las entidades para cada interfaz y las clases creadas son importantes y deben cuidarse.

Paso 3: Crear entidad de datos

  • Cree una clase de datos de muestra con el nombre User.kt.
  • E invoque el siguiente código que contiene entidades User como una entidad, que representa una fila y first_name, last_name, age representa los nombres de las columnas de la tabla.

Kotlin

import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
  
@Entity
data class User(
    @PrimaryKey(autoGenerate = true) val uid: Int,
    @ColumnInfo(name = "name") val firstName: String?,
    @ColumnInfo(name = "city") val lastName: String?
)

Paso 4: Creación de objetos de acceso a datos (DAO):

  • Ahora cree una interfaz llamada UserDao.kt .
  • E invoque el siguiente código que proporciona varios métodos que utiliza la aplicación para interactuar con el usuario.

Kotlin

import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.Query
  
@Dao
interface UserDao {
    @Query("SELECT * FROM user")
    fun getAll(): List<User>
  
    @Query("SELECT * FROM user WHERE uid IN (:userIds)")
    fun loadAllByIds(userIds: IntArray): List<User>
  
    @Insert
    fun insertAll(vararg users: User)
  
    @Delete
    fun delete(user: User)
}

Paso 5: Creación de la base de datos

  • Ahora creamos la base de datos que define la base de datos de la aplicación real, que es el punto de acceso principal a los datos persistentes de la aplicación. Esta clase debe satisfacer:
  1. La clase debe ser abstracta.
  2. La clase debe anotarse con @Database .
  3. La clase de base de datos debe definir un método abstracto con cero argumentos y devuelve una instancia de DAO.
  • Ahora invoque el siguiente código dentro del archivo AppDatabase.kt .

Kotlin

import androidx.room.Database
import androidx.room.RoomDatabase
  
@Database(entities = arrayOf(User::class), version = 1)
abstract class UserDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}

Paso 6: uso de la base de datos de habitaciones

  • Dentro del archivo MainActivity.kt podemos crear una base de datos proporcionando nombres personalizados para la base de datos.

Kotlin

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.room.Room
  
class MainActivity : AppCompatActivity() {
  
    // application's Database name
    private val DATABASE_NAME: String = "USER_DATABASE"
  
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
  
        // get the instance of the application's database
        val db = Room.databaseBuilder(
            applicationContext, UserDatabase::class.java, DATABASE_NAME
        ).build()
  
        // create instance of DAO to access the entities
        val userDao = db.userDao()
  
        // using the same DAO perform the Database operations
        val users: List<User> = userDao.getAll()
    }
}

Nota: Al usar este conocimiento básico sobre la base de datos de habitaciones, se puede crear una aplicación CRUD básica usando la base de datos de habitaciones consultando ¿Cómo realizar operaciones CRUD en la base de datos de habitaciones en Android? .

Publicación traducida automáticamente

Artículo escrito por adityamshidlyali y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *