- Room 사용하기

몇 가지 추가를 해줘야 한다.
//kapt 추가
apply plugin: 'kotlin-kapt'
dependencies {
//Room 추가
def room_version = "2.2.3"
implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor
// optional - Kotlin Extensions and Coroutines support for Room
implementation "androidx.room:room-ktx:$room_version"
// optional - RxJava support for Room
implementation "androidx.room:room-rxjava2:$room_version"
// optional - Guava support for Room, including Optional and ListenableFuture
implementation "androidx.room:room-guava:$room_version"
// Test helpers
testImplementation "androidx.room:room-testing:$room_version"
}
그리고 Room을 위해 3가지 class를 만들었다.

Diaty.kt
@Entity(tableName = "diary")
data class Diary (
@PrimaryKey(autoGenerate = true) val _id: Int,
@ColumnInfo(name = "title") val title: String?,
@ColumnInfo(name = "content") val content: String?
)
Mongo에서 스키마를 만들듯 Entity를 만들었다.
DiaryDao.kt
@Dao
interface DiaryDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)//id가 같을시 대체된다고 함.
fun insert(diary: Diary)
@Query("SELECT * FROM diary")
fun getAll(): List<Diary>
@Query("SELECT * FROM diary WHERE _id IN (:diaryIds)")
fun loadAllByIds(diaryIds: IntArray): List<Diary>
@Query("SELECT * FROM diary WHERE title LIKE :title AND " +
"content LIKE :content LIMIT 1")
fun findByTitle_content(title: String, content: String): Diary
@Insert
fun insertAll(vararg diaries: Diary)
@Delete
fun delete(diary: Diary)
}
기본적인 기능을 하는 sql문을 작성했다.
AppDatabase.kt
@Database(entities = arrayOf(Diary::class), version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun diaryDao(): DiaryDao
companion object {
private var INSTANCE: AppDatabase? = null
fun getInstance(context: Context): AppDatabase? {
if (INSTANCE == null) {
synchronized(AppDatabase::class) {
INSTANCE = Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java,
"dbname.db"
).build()
}
}
return INSTANCE
}
fun destoryInstance() {
INSTANCE = null
}
}
}
Room은 한 개 만들어 놓고 여러 번 사용하기 때문에 싱글톤으로 구현하였다.
그리고 사용할 때는 비동기 처리를 해주어야한다. 이건 3편에 작성하기로 하자.
참고: https://developer.android.com/jetpack/androidx/releases/room
방 | Android 개발자 | Android Developers
Room 지속성 라이브러리는 SQLite를 완벽히 활용하면서 강력한 데이터베이스 액세스를 지원하는 추상화 계층을 SQLite에 제공합니다. 최근 업데이트 현재 안정화 릴리스 다음 출시 후보 베타 릴리스 알파 릴리스2019년 11월 20일 2.2.2 - - - 종속성 선언 Room에 종속성을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다. 자세한 내용은 Google Maven 저장소를 읽어보세요. Room의 종속성에는 Room 이전
developer.android.com
'개발 일기 > Android' 카테고리의 다른 글
[Kotlin] 간단 메모장 만들기4 #RecyclerView #Adapter (0) | 2020.02.19 |
---|---|
[Kotlin] 간단 메모장 만들기3 #LiveData #ViewModel (0) | 2020.02.19 |
[Kotlin] 간단 메모장 만들기 1 #Intent #FloatingActionButton #다크모드 (0) | 2020.02.17 |
[Kotlin] Floating Button 과 QRCODE 인식 (0) | 2019.12.13 |
[Kotiln] WebView ACCESS_DENIED (0) | 2019.12.10 |