
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 } |