• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

보다가 궁금하게생겨서 질문드립니다.

23.06.20 22:15 작성 조회수 193

0

Room database dependency 는

별도의 쿼리문을 작성하지않아도

JPA 마냥 알아서 Crud작업을 해주는건가요?

어노테이션 엔티티 다오 선언만해주고

함수로 인서트와 딜리트를 적었는데

보면서 함수안에 쿼리문을 적을것같다는생각이들었는데

딱히 아무런 쿼리문없이도 인서트와 딜리트가 되는거같아서

만약된다면 그냥함수 이름앞에 insert,delete는 고정이고 뒤에있는거는 아무거나 적어도상관없는건가요??
이게어떻게동작하는지가궁금합니다. 쿼리문없이

 

답변 2

·

답변을 작성해보세요.

0

이준하님의 프로필

이준하

질문자

2023.06.22

감사합니다 이해됐어요!

감사합니다

준하님 완강까지 화이팅!☺️

0

안녕하세요! 준하님 ~ ^^ 조이스입니다.

Kotlin, Java 와 같은 객체 지향 프로그래밍은 클래스를 사용하고 관계형 데이터 베이스에서는 테이블을 사용하기 때문에 객체 모델과 관계형 모델 간에 불일치가 발생하게 됩니다.

ORM(Object relational mapping)은 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결해줍니다. 즉 객체를 통해 간접적으로 데이터 베이스의 데이터를 다루는 것이지요. Room 이 대표적인 안드로이드의 ORM 라이브러리이며, 말씀해주신 것처럼 JPA, Hibernate, Mybatis도 그 예 중에 하나라고 할 수 있습니다.

함수의 이름과 같은 경우는 무엇을 적어주셔도 상관 없습니다. 또한 쿼리문을 사용하고 싶으시다면 아래 예시와 같이 @Query("Query 문") 어노테이션을 사용하여 DB에 접근 할 수도 있습니다.

 

답변이 학습에 도움이 되었기를 바랍니다.

혹시 추가적인 질문 있으시면 남겨주세요.

좋은 하루 보내세요 :)

 

@Dao
interface TestDao {
    @Query("SELECT * FROM Test")
    fun getAll(): LiveData<List<Test>>
   
    @Query("SELECT * FROM task_table WHERE taskId = :key")
    fun get(key: Long): LiveData<Tasks>

    @Query("SELECT * FROM task_table ORDER BY taskId DESC")
    fun getAll(): LiveData<List<Tasks>>

 
    @Insert(onConflict = OnConflictStrategy.REPLACE) // 중복 ID일 경우 교체
    fun insert(todo: Test)
 
    @Update
    fun update(todo: Test)
 
    @Delete
    fun delete(todo: Test)
}