Para documentación formal pueden dirigirse al siguiente link es de Android Developer.
En este tutorial les voy a mostrar de manera general y funcional la forma de manejar persistencia con Room. Para empezar necesitamos de 4 partes importantes:
1. data class, serán nuestras tablas en forma de objetos.
2. DAOs, son interfaces que nos servirán para interactuar con las tablas de la base de datos.
3. Un administrados de la base de datos
4. Un objeto de aplicación para acceder al administrador de la base de datos y a su vez a las tablas.
Para el ejemplo vamos a crear una base con una tabla llamada Usuario
En este tutorial les voy a mostrar de manera general y funcional la forma de manejar persistencia con Room. Para empezar necesitamos de 4 partes importantes:
1. data class, serán nuestras tablas en forma de objetos.
2. DAOs, son interfaces que nos servirán para interactuar con las tablas de la base de datos.
3. Un administrados de la base de datos
4. Un objeto de aplicación para acceder al administrador de la base de datos y a su vez a las tablas.
Para el ejemplo vamos a crear una base con una tabla llamada Usuario
data class
@Entity(tableName = "usuaio") data class Usuario(@PrimaryKey(autoGenerate = true) var id: Int = 0,
var nombres: String, var apellidos: String)
@Entity definimos el nombre de la tabla
@PrimaryKey para definir la clave primaria y si queremos que el id sea autgenerado
DAOs
@Daointerface UsuarioDao {}
Dentro de la interface se pondrán todos los métodos que utilizaremos para registrar u obtener data de la tabla.
Para el ejemplo utilizaremos los siguientes:
@Dao
Dentro de la interface se pondrán todos los métodos que utilizaremos para registrar u obtener data de la tabla.
Para el ejemplo utilizaremos los siguientes:
@Dao
interface UsuarioDao {
@Query("SELECT * FROM usuario")
fun getUsuarios(): MutableList
//el metodo de @Insert debe tener esta firma recibe un objeto y retorna un Long
@Insert
fun agregar(usuario : Usuario) : Long
@Insert
fun agregar(usuario : Usuario) : Long
//el método de @Update debe tener esta firma
//recibe un objeto y retorna un Int
@Update
fun actualizar (usuario: Usuario) : Int
//el método de @Delete debe tener esta firma
//recibe un objeto y retorna un Int
@Update
fun actualizar (usuario: Usuario) : Int
//el método de @Delete debe tener esta firma
//recibe un objeto y retorna un Int
@Delete
fun eliminar (usuario : Usuario) : Int
@Delete
fun eliminar (usuario : Usuario) : Int
@Query("SELECT * FROM usuario where id like :idUsuario")
fun getUsuaiorPorId (idUsuario : Long) : Usuario
}
Admin Base de Datos
Esta clase abstracta va a manejar todas las tablas de la base de datos, para el ejemplo tenemos una sola
tabla usuario pero si necesitamos más tablas las debemos manejar en el atributo entities.@Database(entities = arrayOf(Usuario::class), version = 1) abstract class BddHelper : RoomDatabase(){ abstract fun usuarioDao() : UsuarioDao }Objeto de Aplicación
Es como una clase parecida a un singleton y se lo debe referenciar en el AndroiManifest
<application android:name=".app.RoomTestApp"import android.app.Application import android.arch.persistence.room.Room import ec.com.kruger.roomtest.persistencia.BddHelper class RoomTestApp : Application() { companion object { lateinit var bddHelper: BddHelper } override fun onCreate() { super.onCreate()
//esta línea crea la bdd e implementa los métodos definidos en el DAO de cada tabla
RoomTestApp.bddHelper = Room.databaseBuilder(applicationContext, BddHelper::class.java,
"tareas-bdd").build()
}
}
Para probar todo se puede hacer una prueba desde el método onCreate del Activity principal
de la siguiente manera:
fun agrearTarea() { doAsync { val id = RoomTestApp.bddHelper.usuarioDao().agregar(Usuario(nombres = "Andrés", apellidos = "Fernández")) val usuarioRecuperado = RoomTestApp.bddHelper.usuarioDao().getUsuarioPorId(id) uiThread { // se hace la vista de la app, por ejemplo cargar data en un ListView } } }
Comentarios
Publicar un comentario