개발노트/android

Room Database

시계속세상은아직돌아가는중 2024. 1. 16. 16:52

1. 의존성

안정화 버전 확인 : https://developer.android.com/topic/libraries/architecture/room?hl=ko

 

Room 지속성 라이브러리  |  Android 개발자  |  Android Developers

Room 라이브러리 사용 방법을 알아봅니다.

developer.android.com

plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
    id("kotlin-kapt")
}

val room_version = "2.6.0-rc01"

    implementation("androidx.room:room-runtime:$room_version")
    annotationProcessor("androidx.room:room-compiler:$room_version")
    // To use Kotlin annotation processing tool (kapt)
    kapt("androidx.room:room-compiler:$room_version")

    implementation("androidx.room:room-ktx:$room_version")

 

2. DB

 

@Database(entities = [], version = 1)
abstract class Database : RoomDatabase() {

    abstract fun testDao(): TextDao

    companion object {
        @Volatile
        private var INSTANCE: Database? = null

        fun getDatabase(
            context: Context
        ): Database {
            return INSTANCE ?: synchronized(this) {
                val instance = Room.databaseBuilder(
                    context.applicationContext,
                   Database::class.java,
                    "database"
                )
                    .fallbackToDestructiveMigration()
                    .build()
                INSTANCE = instance
                instance
            }
        }

    }

}

 

entity변경 시 버전 업 할 것

3. dao

@Dao
interface TextDao {
    @Query(value = "SELECT * FROM text_table")
    fun getAllData() : List<TextEntity>

    @Insert(onConflict = OnConflictStrategy.IGNORE)
    fun insert(textEntity: TextEntity)

    @Query("DELETE FROM text_table")
    fun deleteAllData()
}

 

4. Entity

@Entity(tableName = "text_table")
data class TextEntity(
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "id")
    val id: Int,
    @ColumnInfo(name = "text")
    val text: String
)

 

PrimaryKey는 반드시 존재해야 하며 불변성을 가져야 함.(한 번 부여 후 변경 하면 안됨)

또한 emtity 안에서 중복되지 않는 고유 값이여야 함.

 

해당 부여 방식은 auto가 아니라면 uuid등이 있음