ORM(Object Relational Mapping)
라이브러리이다.서버와 통신할 때 쓸 String형 access_token
유저의 기본 정보 클래스
@Entity
로 선언한다.@Dao
로 선언한다.@Database
로 선언한다.@Database(entities = [UserInfo::class], version = 1)
int
값을 넣어 관리한다.plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id 'kotlin-android' // 추가
id 'kotlin-kapt' // 추가
}
dependencies {
// Room DB
def roomVersion = "2.4.3"
implementation("androidx.room:room-runtime:$roomVersion")
annotationProcessor("androidx.room:room-compiler:$roomVersion")
kapt("androidx.room:room-compiler:$roomVersion")
implementation("androidx.room:room-ktx:$roomVersion")
}
@Entity
어노테이션을 표시한다.기본키
를 설정해야하며, @PrimaryKey
로 선언된 변수가 기본키이다.복합키
로 이루어질 수 있다. 이럴 경우 어노테이션에서 설정해준다.@Entity(primaryKeys = arrayOf("firstName", "lastName"))
Entity(tableName = "bookmark")
@CcolumnInfo
로 가능하다. 기본적으로 변수 이름이 열 이름이 된다. 만약 별도로 열 이름을 설정하고 싶다면 name 속성을 주면 된다.@ColumnInfo(name ="category") val quoteCategory:String?
@Entity
data class Bookmark(
// PrimaryKey 를 자동적으로 생성
@PrimaryKey(autoGenerate = true)
val uid: Int?,
@ColumnInfo(name ="quote")
val quote:String?,
@ColumnInfo(name ="quoteCategory")
val quoteCategory:String?,
)
@Dao
라는 어노테이션이 필요하며, 인터페이스(interface)
로 작성된다.@Query
를 통해 직접 SQL을 작성할 수 있다. 그 외에도 @Insert
@Delete
@Update
등으로 간편하게 구현할 수 있는 기능을 제공한다.@Dao
interface BookmarkDao {
@Query("SELECT * FROM bookmark")
fun getAll(): List<Bookmark>
@Insert
fun insertBookmark(bookmark: Bookmark)
@Query("DELETE FROM bookmark")
fun deleteAll()
@Delete
fun delete(bookmark: Bookmark)
}
@Database
를 사용하며 클래스는 추상 클래스
로 작성되어야 한다.RoomDatabase()
를 상속해야 하며 매개 변수가 없는 추상 메서드를 포함해야 한다.@Database(entities = [Bookmark::class], version = 1, exportSchema = false)
abstract class BookmarkDatabase:RoomDatabase() {
abstract fun bookmarkDao() : BookmarkDao
}
Room.databaseBuilder
를 하여 코틀린에서 사용한다.DB 정의
에서 DAO 밑에 추가해서 어느 클래스에서든 접근할 수 있도록 했다.companion object{
var bookmarkDatabase : BookmarkDatabase ?= null
fun getBookmarkDatabase(context: Context): BookmarkDatabase?{
if (bookmarkDatabase == null){
bookmarkDatabase = Room.databaseBuilder(
context.applicationContext,
BookmarkDatabase::class.java,
"bookmarkDatabase" )
.allowMainThreadQueries()
.build()
}
return bookmarkDatabase
}
}
private var bookmarkList : List<Bookmark> ?= null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
..
// DB 빌드
bookmarkDatabase = getBookmarkDatabase(this)
// DB 사용
bookmarkList = bookmarkDatabase!!.bookmarkDao().getAll()
}
참고
- https://velog.io/@limsaehyun/Android-Kotlin-Room-DB%EC%9D%98-%EC%82%AC%EC%9A%A9%EB%B2%95%EA%B3%BC-%EC%98%88%EC%A0%9C
- https://kong-droid.com/41
- https://latte-is-horse.tistory.com/155