Room 추가하기
Room을 사용하기 위해서 build.gradle에 Room 라이브러리를 추가합니다.
plugins {
id 'kotlin-android'
id 'kotlin-kapt'
}
dependencies {
val room_version = "2.5.0"
implementation 'androidx.room:room-runtime:$room_version'
kapt 'androidx.room:room-compiler:$room_version'
}
Room 구성요소
- Database
- 데이터베이스 구성을 정의하고 영구 데이터에 대한 앱의 기본 액세스 포인트 역할을 수행합니다.
- Database 어노테이션을 사용하고 어노테이션 내에 entities을 포함해야 합니다.
- RoomDatabase()를 확장하는 추상 클래스여야 합니다.
- 인수가 0개이고 DAO 클래스의 인스턴스를 반환하는 추상 메서드를 정의해야 합니다.
/*
테이블(Student)을 컨트롤할 수 있는 함수의 모음(StudentDAO)을
Helper(RoomHelper)를 통해서 꺼내서 쓸 수 있도록 만들어주는 클래스
*/
@Database(entities = [Student::class], version = 1, exportSchema = false)
abstract class RoomHelper : RoomDatabase() {
abstract fun StudentDao(): StudentDao
}
- Entity
- Entity 어노테이션을 사용함으로써 클래스 자체가 데이터베이스 테이블이 됩니다.
- 각 entity는 1개의 primary key를 가져야 하므로 PrimaryKey 어노테이션을 사용합니다.
- ColumnInfo 어노테이션을 사용함으로써 선언할 변수 값들이 데이터베이스의 컬럼 값이 됩니다.
@Entity(tableName = "Students")
data class Student(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "ID")
var id: Long?,
@ColumnInfo(name = "NAME")
var name: String,
@ColumnInfo(name = "NUMBER")
var number: Long,
@ColumnInfo(name = "GRADE")
var grade: Long
)
- DAO (Data Access Object)
- 데이터베이스에 접근할 수 있는 메서드를 인터페이스 형태로 설계하고 사용합니다.
- 코드 없이 이름만 명시하는 형태로 인터페이스를 만들면 Room이 나머지 코드를 자동 생성합니다.
- 다른 ORM들과는 다르게 조회를 하는 SELECT 쿼리는 직접 작성하도록 설계되어 있습니다.
- @Insert(onConflict = REPLACE)의 경우, 이미 존재하는 값에 대한 insert를 시도 시 update를 해주는 방식으로 update와 동일한 기능을 합니다.
@Dao
interface StudentDao {
@Query("SELECT * FROM Students")
fun getAll(): List<Student>
@Query("SELECT * FROM Students ORDER BY ID DESC LIMIT 1")
fun getLatestStudent(): Student
@Insert(onConflict = REPLACE)
fun insert(student: Student)
@Update
fun update(student: Student)
@Delete
fun delete(student: Student)
}
728x90
반응형
'안드로이드 > 활용' 카테고리의 다른 글
[Android] ListAdapter로 RecyclerView 효율적으로 사용하기 (0) | 2023.07.27 |
---|---|
[Android] RecyclerView (0) | 2023.07.26 |
[Android] addView와 ListView (0) | 2023.07.25 |
[Android] SQLite 사용하기 (0) | 2023.07.24 |
[Android] 로컬 데이터베이스에 데이터 저장 (0) | 2023.07.22 |