개발노트/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등이 있음