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
- 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.
- Entidades de datos: esto representa todas las tablas de la base de datos existente. Y anotado con @Entity.
- 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
- Cree un proyecto de Android Studio de actividad vacío. Consulte Android | ¿Cómo crear/comenzar un nuevo proyecto en Android Studio? , a cómo crear un proyecto de Android Studio de actividad vacía.
- Y seleccione Kotlin como idioma.
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:
- La clase debe ser abstracta.
- La clase debe anotarse con @Database .
- 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