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. Android Room Na Prática Manuel Ernesto Software Engineer, Disruption Lab

    Mozambique
  2. 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. Biblioteca Android 2. Parte do Android Jetpack 3. Camada

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

    de abstracção sobre o banco de dados SQLite 4. Cache Android Room
  7. 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. 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
  10. 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
  11. 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
  12. Arquitectura

  13. Arquitectura

  14. Componentes

  15. 1. Database 2. Entity 3. DAO Componentes @Database(entities = [Palestrante::class],

    version = 1) abstract class EventoDB: RoomDatabase() { abstract fun dao(): PalestranteDAO }
  16. 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 )
  17. 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) }
  18. Relacionamentos

  19. 1:1 ‍ ←→ ‍ ←→ Relacionamentos

  20. 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 )
  21. 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 ‍ ←→ ‍ ←→
  22. 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 ‍ ←→ ‍ ←→
  23. 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 ‍ ←→ ‍ ←→
  24. 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 ‍ ←→ ‍ ←→
  25. 1:* ‍ ←→ ‍ ←→ Relacionamentos

  26. 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:* ‍ ←→ ‍ ←→
  27. 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:* ‍ ←→ ‍ ←→
  28. 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:* ‍ ←→ ‍ ←→
  29. *:* ‍ ←→ ‍ ←→ Relacionamentos

  30. 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 ) *:* ‍ ←→ ‍ ←→
  31. 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, ) *:* ‍ ←→ ‍ ←→
  32. Relacionamentos JOIN JOIN JOIN *:* ‍ ←→ ‍ ←→

  33. Relacionamentos JOIN JOIN JOIN ❌ *:* ‍ ←→ ‍ ←→

  34. Relacionamentos data class PalestraEPalestrante( @Embedded val palestrante: Palestrante, @Relation (

    parentColumn = "id", entity: Palestrante::class, entityColumn= "idPalestrante", associateBy= Junction(PalestranteEPalestra::class) ) val palestras: List<Palestra> ) *:* ‍ ←→ ‍ ←→
  35. Relacionamentos @Transaction @Query(“SELECT * FROM palestra”) fun getPalestraEPalestrante():List<PalestraEPalestrante> *:* ‍

    ←→ ‍ ←→
  36. Configuração

  37. Componentes def room_version = "2.2.5" implementation "androidx.room:room-runtime:$room_version" kapt "androidx.room:room-compiler:$room_version"

  38. Componentes implementation "androidx.room:room-ktx:$room_version" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9"

  39. DEMO ‍

  40. 1. https://cutt.ly/5ghsA4h 2. https://github.com/manuelernesto/android-room-demo-talk 3. https://developer.android.com/topic/libraries/architecture/room 4. https://developer.android.com/jetpack Links ⛓

  41. Obrigado Twitter: @manuelernest0 Medium: @manuelernesto Github: @manuelernesto Mozambique