안드로이드 앱에서 SQLite 데이터베이스를 쉽고 편리하게 사용할 수 있도록 하는 라이브러리이다.
Room은 Entity, Dao, RoomDatabase 3가지 요소로 구성된다.
implementation "androidx.room:room-runtime:2.2.0-alpha02"
testImplementation "androidx.room:room-testing:2.2.0-alpha02"
kapt "androidx.room:room-compiler:2.2.0-alpha02"
annotationProcessor "androidx.room:room-compiler:2.2.0-alpha02"
implementation "androidx.room:room-rxjava2:2.2.0-alpha02"
implementation "androidx.room:room-guava:2.2.0-alpha02"
최신버전은 이곳 에서 확인할 수 있다.
@Entity(tableName = "user_table")
class User(@field:PrimaryKey
var id: String,
var name: String,
var birth: String,
var gender: String,
var phoneNumber: String,
var picture: String?,
var intro: String?,
var scope: String,
var point: Int)
Entity 즉 테이블로 만들고 싶은 객체에 어노테이션으로 Entity를 선언하고 tableName을 지정해 준다.
@field:PrimaryKey를 사용하여 PrimaryKey를 만들 수도 있고
@field:ColumnInfo(name = "컬럼이름")를 사용하여 객체의 변수이름과 다르게 table 변수를 지정할 수도 있다.
@Dao
interface BaseDao<ET> {
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(entity: ET)
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(entity: Array<out ET>)
@Update
fun update(entity: ET)
@Delete
fun delete(entity: ET)
}
@Dao
interface UserDao : BaseDao<User> {
@Query("SELECT * FROM user_table WHERE id=:id")
fun getUser(id: String?): LiveData<User>
}
Dao 어노테이션과 Insert, Update, Delete, Query 어노테이션을 이용하여 만들어 준다.
insert, update, delete를 BaseDao에 만들어주고
Query문을 작성해야 하는 이벤트의 경우엔 BaseDao를 상속받는 객체에 넣어준다.
@Database(entities = [User::class], version = 1, exportSchema = false)
abstract class RoomDatabase : androidx.room.RoomDatabase() {
abstract fun userDao(): UserDao
companion object {
private var instance: RoomDatabase? = null
@Synchronized
fun getInstance(context: Context): RoomDatabase? {
if (instance == null) {
instance = Room.databaseBuilder(context.applicationContext,
RoomDatabase::class.java, "weknot_database")
.fallbackToDestructiveMigration()
.allowMainThreadQueries()
.build()
}
return instance
}
}
}
RoomDatabase에서 데이터베이스를 생성하고 버전을 관리 한다.