오늘은 roomDB를 사용해서 검색기록을 남기는 방법에 대해 정리해보았다.
app수준 gradle에 plugins{}안에 kotlin("kapt") 를 추가해주고,
//room DB
val roomVersion = "2.4.2"
implementation("androidx.room:room-runtime:$roomVersion")
kapt("androidx.room:room-compiler:$roomVersion")
위와같이 dependencies안에 추가해준다.
@Entity(tableName = "searchHistoryEntity")
data class SearchHistoryEntity(
@PrimaryKey(autoGenerate = true)
val id: Int?,
@ColumnInfo(name = "contents")
val contents: String,
@ColumnInfo(name = "date")
val date: String,
)
Entitiy를 만들어준다. tableName을 원하는 테이블 이름으로 만들어준다.
여기서 기본키를 생성해야하는데 각 항목마다 id를 만들어주고 autoGenerate = true를 추가해줘서 id가 자동으로 만들어지게 했다.
나머지로 내용과 날짜를 만들어줬다.
@Dao
interface SearchHistoryDao {
@Insert
fun insert(history: SearchHistoryEntity)
@Delete
fun delete(history: SearchHistoryEntity)
@Query("SELECT * FROM searchHistoryEntity ORDER BY id DESC")
fun getAllHistory(): MutableList<SearchHistoryEntity>
}
Dao 인터페이스를 생성해준다.
나는 삽입, 삭제, 불러오기 3가지 기능을 사용해서 만들어줬다.
@Database(entities = [SearchHistoryEntity::class], version = 1)
abstract class AppDatabase: RoomDatabase() {
abstract fun searchHistoryDao(): SearchHistoryDao
companion object{
@Volatile
private var INSTANCE: AppDatabase? = null
fun getDatabase(context: Context): AppDatabase {
if(INSTANCE == null){
INSTANCE = Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java,
"app_database")
.allowMainThreadQueries()
.build()
}
return INSTANCE as AppDatabase
}
}
}
데이터베이스에서 사용할 DAO(Data Access Object)를 정의해준다. 여기서는 앞에서 만들어준 SearchHistoryDao를 사용해준다. INSTANCE 변수는 데이터베이스의 싱글톤 인스턴스를 저장해준다.
앱의 어디서든 사용할 수 있게 companion object 안에
lateinit var database: AppDatabase
이렇게 선언해주고
database = AppDatabase.getDatabase(this)
데이터베이스를 원하는 곳에서 초기화해준다.
val newSearchHistory = SearchHistoryEntity(null, contents = searchText, date = formattedDate)
database.searchHistoryDao().insert(newSearchHistory)
이렇게 해서 roomDB에 원하는 데이터를 insert시켜줄 수 있다. delete및 기타 원하는 Query들도 입맛에 맞게 수정해서 사용해주면 된다.
룸
룸디비
room
Room
RoomDB