ORM

ORM이란 Object Relational Mapping 으로 데이터베이스와 객체 지향 프로그래밍 언어간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법으로 DB 테이블과 매핑되는 객체를 만들고 그 객체에서 DB를 관리하는 것이다.

 

Room

Room은 SQLite에 대한 추상화 레이어를 제공하여 원활한 데이터베이스 액세스를 지원하는 동시에 SQLite를 완벽히 활용해준다. 안드로이드 아키텍처 컴포넌트 룸 라이브러리는 안드로이드 앱에서 SQLite 데이터베이스를 쉽고 편리하게 사용할 수 있도록 하는 기능이다. 이를 다시 정리하면 SQLite 위에 만든 구글의 새로운 ORM 이라고 할 수 있다. 룸 라이브러리는 엔티티(Entity), 데이터 접근 객체(Data Access Object:DAO),  룸 데이터베이스(Room Database),  총 세 개의 요소로  구성되어져 있다.

 

build.gradle

  - Room을 사용하기 위해서는 아래와 같이 gradle을 추가해야 된다.

1
2
3
4
5
6
7
8
9
10
plugins {
    //room사용시 추가
    id 'kotlin-kapt'
}
 
dependencies {
    //room사용시 추가
    implementation 'androidx.room:room-runtime:2.3.0'  //runtime시 사용할 room을 추가
    kapt 'androidx.room:room-compiler:2.3.0' //compiler에서 사용한 room 추가
}

 

 

사용예

- @Entity

1
2
3
4
5
6
@Entity
    data class User(
        @PrimaryKey val uid: Int,
        @ColumnInfo(name = "first_name") val firstName: String?,
        @ColumnInfo(name = "last_name") val lastName: String?
    )

 

- @Dao

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Dao
interface UserDao {
    @Query("SELECT * FROM user")
    fun getAll(): List<User>
 
    @Query("SELECT * FROM user WHERE uid IN (:userIds)")
    fun loadAllByIds(userIds: IntArray): List<User>
 
    @Query("SELECT * FROM user WHERE first_name LIKE :first AND " +
           "last_name LIKE :last LIMIT 1")
    fun findByName(first: String, last: String): User
 
    @Insert
    fun insertAll(vararg users: User)
 
    @Delete
    fun delete(user: User)
}

 

- @Database

1
2
3
4
@Database(entities = arrayOf(User::class), version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}

 

Posted by 농부지기
,