- 안드로이드 Jetpack이 제공하는 데이터베이스 아키텍처
- Object Relational Mappin, ORM 라이브러리
데이터베이스의 객체를 자바 or 코틀린 객체로 매핑해줍니다.
Entity
데이터베이스에서의 테이블 역할
Dao
데이터베이스에 접근하는 데 필요한 메서드 포함
ex. Query, Insert, Update, Delete ...
Database
RoomDatabase 클래스를 상속받는 abstract class
dependencies {
def room_version = "2.2.6"
implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"
// optional - Kotlin Extensions and Coroutines support for Room
implementation "androidx.room:room-ktx:$room_version"
// optional - Test helpers
testImplementation "androidx.room:room-testing:$room_version"
}
@Entity
data class Todo(var todoList: String) {
@PrimaryKey(autoGenerate = true)
var id: Int = 0
}
❓ autoGenerate = true : 자동으로 PK값 1씩 증가
@Dao
interface TodoDAO {
@Query("SELECT * FROM Todo")
fun getAll(): List<Todo>
@Query("SELECT todoList FROM Todo")
fun getTodoList(): MutableList<String>
@Insert
fun insert(todo: Todo)
...
}
@Database(entities = [Todo::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun toDoDao(): TodoDAO
}
db = Room.databaseBuilder(baseContext, AppDatabase::class.java, "TodoDB")
.allowMainThreadQueries()
.build()
// insert Todo
db.toDoDao().insert(Todo(editTextTodo.get().toString()))
// show TodoList
binding.textViewTodoList.text = db.toDoDao().getTodoList().toString()