Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Android Room Na Prática

Android Room Na Prática

This presentation is about Android Jetpack Room, the library for working with SQLite Database in Android.
This presentation was given at Devfest Mozambique 2020. #devfest #devfest2020

Manuel Ernesto

October 17, 2020
Tweet

More Decks by Manuel Ernesto

Other Decks in Programming

Transcript

  1. 1. Biblioteca Android 2. Parte do Android Jetpack 3. Camada

    de abstracção sobre o banco de dados SQLite 4. Cache Android Room
  2. 1. Biblioteca Android 2. Parte do Android Jetpack 3. Camada

    de abstracção sobre o banco de dados SQLite 4. Cache Android Room
  3. 1. Biblioteca Android 2. Parte do Android Jetpack 3. Camada

    de abstracção sobre o banco de dados SQLite 4. Cache Android Room
  4. 1. Biblioteca Android 2. Parte do Android Jetpack 3. Camada

    de abstracção sobre o banco de dados SQLite 4. Cache Android Room
  5. 1. Verificação em tempo de compilação das consultas SQL 2.

    Construído para trabalhar com Coroutines 3. Construído para trabalhar com LiveData e ViewModel 4. Facilidade no mapeamento das entidades da base de dados para objectos Kotlin/Java Vantagens
  6. 1. Verificação em tempo de compilação das consultas SQL 2.

    Construído para trabalhar com Coroutines 3. Construído para trabalhar com LiveData e ViewModel 4. Facilidade no mapeamento das entidades da base de dados para objectos Kotlin/Java Vantagens
  7. 1. Verificação em tempo de compilação das consultas SQL 2.

    Construído para trabalhar com Coroutines 3. Construído para trabalhar com LiveData e ViewModel 4. Facilidade no mapeamento das entidades da base de dados para objectos Kotlin/Java Vantagens
  8. 1. Verificação em tempo de compilação das consultas SQL 2.

    Construído para trabalhar com Coroutines 3. Construído para trabalhar com LiveData e ViewModel 4. Facilidade no mapeamento das entidades da base de dados para objectos Kotlin/Java Vantagens
  9. 1. Database 2. Entity 3. DAO Componentes @Database(entities = [Palestrante::class],

    version = 1) abstract class EventoDB: RoomDatabase() { abstract fun dao(): PalestranteDAO }
  10. 1. Database 2. Entity 3. DAO Componentes @Entity(tableName = "db.palestrante")

    data class Palestrante( @PrimaryKey(autoGenerate = true) var id: Long, @ColumnInfo(name = "nome_palestrante") val nome: String )
  11. 1. Database 2. Entity 3. DAO Componentes @Dao interface PalestranteDAO

    { @Insert suspend fun salvar(palestrante: Palestrante) @Query("SELECT * FROM db.palestrante") suspend fun buscarTodos(): List<Palestrante> @Update suspend fun actualizar(palestrante: Palestrante) @Delete suspend fun apagar(palestrante: Palestrante) }
  12. 1:1 ‍ ←→ ‍ ←→ Relacionamentos @Entity(tableName = "db.palestrante") data

    class Palestrante( @PrimaryKey(autoGenerate = true) var id: Long, @ColumnInfo(name = "nome_palestrante") val nome: String ) @Entity data class Palestra( @PrimaryKey(autoGenerate = true) var idPalestra: Long, var idPalestrante: Long, val titulo: String )
  13. Relacionamentos @Entity ( foreignKeys = [ ForeignKey( entity = Palestrante::class,

    parentColumns = ["id"], childColumns = ["idPalestrante"] ) ] ) data class Palestra( @PrimaryKey(autoGenerate = true) var idPalestra: Long, var idPalestrante: Long, val titulo: String ) 1:1 ‍ ←→ ‍ ←→
  14. Relacionamentos SELECT * FROM palestrante SELECT * FROM palestra WHERE

    idPalestrante = … data class PalestraEPalestrante( @Embedded val palestrante: Palestrante, @Relation (parentColumn = "id", entityColumn= "idPalestrante") val palestra: Palestra ) 1:1 ‍ ←→ ‍ ←→
  15. Relacionamentos SELECT * FROM palestrante SELECT * FROM palestra WHERE

    idPalestrante = … data class PalestraEPalestrante( @Embedded val palestrante: Palestrante, @Relation (parentColumn = "id", entityColumn= "idPalestrante") val palestra: Palestra ) ❌ 1:1 ‍ ←→ ‍ ←→
  16. Relacionamentos @Transaction @Query(“SELECT * FROM palestra”) fun getPalestraEPalestrante():List<PalestraEPalestrante> data class

    PalestraEPalestrante( @Embedded val palestrante: Palestrante, @Relation (parentColumn = "id", entityColumn= "idPalestrante") val palestra: Palestra ) 1:1 ‍ ←→ ‍ ←→
  17. Relacionamentos SELECT * FROM palestrante SELECT * FROM palestra WHERE

    idPalestrante IN(…) data class PalestraEPalestrante( @Embedded val palestrante: Palestrante, @Relation (parentColumn = "id", entityColumn= "idPalestrante") val palestra: Palestra ) 1:* ‍ ←→ ‍ ←→
  18. Relacionamentos SELECT * FROM palestrante SELECT * FROM palestra WHERE

    idPalestrante = … data class PalestraEPalestrante( @Embedded val palestrante: Palestrante, @Relation ( parentColumn = "id", entity: Palestrante::class, entityColumn= "idPalestrante" ) val palestras: List<Palestra> ) ❌ 1:* ‍ ←→ ‍ ←→
  19. Relacionamentos @Transaction @Query(“SELECT * FROM palestra”) fun getPalestraEPalestrante():List<PalestraEPalestrante> data class

    PalestraEPalestrante( @Embedded val palestrante: Palestrante, @Relation (parentColumn = "id", entity: Palestrante::class, entityColumn= "idPalestrante") val palestras: List<Palestra> ) 1:* ‍ ←→ ‍ ←→
  20. Relacionamentos @Entity(tableName = "db.palestrante") data class Palestrante( @PrimaryKey(autoGenerate = true)

    var id: Long, @ColumnInfo(name = "nome_palestrante") val nome: String ) @Entity data class Palestra( @PrimaryKey(autoGenerate = true) var idPalestra: Long, val titulo: String ) *:* ‍ ←→ ‍ ←→
  21. Relacionamentos @Entity(tableName = "db.palestrante") data class Palestrante( @PrimaryKey(autoGenerate = true)

    var id: Long, @ColumnInfo(name = "nome_palestrante") val nome: String ) @Entity data class Palestra( @PrimaryKey(autoGenerate = true) var idPalestra: Long, var idPalestrante: Long, val titulo: String ) @Entity(primaryKeys = ["idPalestra","idPalestrante"]) data class PalestranteEPalestra( val idPalestra: Long, val idPalestrante: Long, ) *:* ‍ ←→ ‍ ←→
  22. Relacionamentos data class PalestraEPalestrante( @Embedded val palestrante: Palestrante, @Relation (

    parentColumn = "id", entity: Palestrante::class, entityColumn= "idPalestrante", associateBy= Junction(PalestranteEPalestra::class) ) val palestras: List<Palestra> ) *:* ‍ ←→ ‍ ←→