[코틀린] Room persitence library

Room persitence library

코드 라인에서 Room을 입력한뒤 add dependency를 통해 간단히 dependency를 추가할 수 있다.

환경 설정


    def room_version = "2.3.0"
	implementation("androidx.room:room-runtime:$room_version")
    annotationProcessor "androidx.room:room-compiler:$room_version"

// 위 코드가 추가되는데, Kotlin를 사용하기 위해서는 
    kapt("androidx.room:room-compiler:$room_version")
// 이 코드가 추가되어야 한다(Kotlin annotation processing tool.kapt).


plugins{
 	id 'kotlin-kapt'   
}

//위 플러그인이 추가되어야 함.

Entity

@Entity
data class Todo(var title : String){
    @PrimaryKey(autoGenerate = true) var id : Int = 0
}

Dao

@Dao
interface TodoDao {
    @Query("SELECT * FROM Todo")
    fun getAll(): LiveData<List<Todo>>

    @Insert
    fun insert(todo: Todo)

    @Update
    fun update(todo: Todo)

    @Delete
    fun delete(todo: Todo)
}

Database

@Database(entities = [Todo::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun todoDao(): TodoDao
}

Get Db instance

val db = Room.databaseBuilder(
        applicationContext,
        AppDatabase::class.java, "todo-db"
    ).allowMainThreadQueries().build()
    
    
//{.allowMainThreadQueries()}는 학습을 위해 임시로 넣어 놓은것.
//이를 MainThread가 아닌 쓰레드에서 비동기 처리해야 한다.

Coroutine

dependencies {
    implementation("androidx.room:room-ktx:2.3.0")
}

//Room 확장 프로그램은 데이터베이스 트랜잭션을 위한 코루틴 지원을 추가한다.
//위 dependency를 추가하지 않으면 Dao에 suspend 키워드를 사용할 수 없다. 에러남.