안녕하세요 이번 글에서는 ORM의 라이브러리인 Room을 사용해보도록 하겠습니다.
* ORM( Object Relational Mapping )은 객체와 관계형 데이터베이스의 데이터를 맵핑하고 변환하는 기술로 복잡한 쿼리를 잘 몰라도 코드만으로 데이터베이스를 컨트롤할 수 있도록 도와줍니다.
먼저 프로젝트를 하나 생성한 뒤 라이브러리를 추가하여 주겠습니다.
buil.gradle(Module)로 이동하여 줍시다.
가장 위쪽에 plugins 블록 안에 아래 플러그인을 추가하여 줍니다.
id 'kotlin-kapt'
그다음 가장 아래 dependencies블록에 다음 코드를 넣어 준다음 sync now를 해줍시다.
def room_version = "2.2.6"
implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"
버전이 맞이 않아 앱이 잘 실행이 되지 않을 경우 아래 링크에서 최신 버전을 확인해 주세요
developer.android.com/jetpack/androidx/releases/room
* kept란?
자바의 Pluggable Annoation Processing API를 Kotlin에서도 사용 가능하게 하는 것입니다.
ORM을 사용하기 위해 객체를 만들어 줍시다.
기본 패키지 아래 RoomMemo클래스를 하나 만들어 줍시다.
package com.example.room_kt
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
//해당 테이블에 객체를 맵핑하기 위해서 Entity 를 선언하여 줍니다.
@Entity(tableName = "orm_memo")
class RoomMemo {
// ColumnInfo 을 선언하여 해당 프로퍼티를 테이블의 컬럼으로 사용된다는 것을 명시합니다.
// PrimaryKey 를 지정하여 주고 옵션으로 autoGenerate 를 true 로 지정하여 주면 Key 가 자동증가 하도록 해줍니다.
@PrimaryKey(autoGenerate = true)
@ColumnInfo
var id:Long? = null
@ColumnInfo
var content:String = ""
@ColumnInfo
var datetime:Long = 0
constructor(content:String, datetime:Long){
this.content = content
this.datetime = datetime
}
}
다음 DB의 DML 메서드를 구현하기 위해 RoomMemoDao 인터페이스를 생성하여 줍시다.
package com.example.room_kt
import android.icu.text.Replaceable
import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.Query
import androidx.room.OnConflictStrategy.*
//Dao 를 선언하여 줍시다.
@Dao
interface RoomMemoDao {
@Query("select * from orm_memo")
fun getAll():List<RoomMemo>
//onConflict 를 적용하면 동일한 값이 입력 됬을시 update 쿼리를 실행시켜 줍니다.
@Insert(onConflict = REPLACE)
fun insert(memo:RoomMemo)
@Delete
fun delete(memo:RoomMemo)
}
다음으로 RoomMemoDao를 사용하기 위한 구현체인 RoomHelper 클래스를 만들어 줍니다.
package com.example.room_kt
import androidx.room.Database
import androidx.room.RoomDatabase
//entities = Room 라이브러리가 사용할 엔티티 클래스 목록
//version = 데이터 베이스 의 버전
//exportSchema = true 면 스키마 정보를 파일로 출렵 합니다.
@Database(entities = arrayOf(RoomMemo::class),version = 1,exportSchema = false)
abstract class RoomHelper: RoomDatabase() {
//실제로 사용될 구현체 메소드
abstract fun roomMemoDao():RoomMemoDao
}
이번 글에서는 기본적으로 Room을 이용하여 기본 기능들을 정의하였습니다.
다음 글에서 이것을 가지고 뷰에서 활용하여 보겠습니다.
감사합니다.
'KOTLIN' 카테고리의 다른 글
코틀린(Kotlin) 안드로이드 스튜디오 카메라 사용하기 (0) | 2021.01.25 |
---|---|
코틀린(Kotlin) 안드로이드 스튜디오 Room - ORM 라이브러리 사용-2 (0) | 2021.01.24 |
코틀린(Kotlin) 안드로이드 스튜디오 SQLite 데이터베이스 사용하기-2 (0) | 2021.01.24 |
코틀린(Kotlin) 안드로이드 스튜디오 SQLite 데이터베이스 사용하기-1 (0) | 2021.01.24 |
코틀린(Kotlin) 안드로이드 스튜디오 SharedPerferences 사용하기 (0) | 2021.01.23 |