2023/12/13 TIL

문정현·2023년 12월 13일
0

JPA를 여기와서 배우면서 잊고있었던 MyBatis가 등장했다 (무척반갑)

ORM 은 갑자기 나타난것이 아니라 점차 발전해온 DB 연동 기술이론이다.

  • JDBC > ( QueryMapper > ORM(JPA)) 는 포함/개선 관계입니다.

여기서 QueryMapper의 부분에서 만났는데 그새 기술이 발전하여 XML형식은 이제 구시대의 잔상이 되어있고 이젠 어노테이션으로 하는데 훨씬 좋아보였다

@Mapper
public interface CityMapper {

  @Select("select id, name, state, country from city where state = #{state}")
  City findByState(@Param("state") String state);

}

Mybatis 깃 샘플코드이다

<mapper.>
   <script.>
       <insert.>
            쿼리문
       <insert.>
   </script.>
<mapper.>
이렇게 하던 과거 방식과 비교하면 진짜 선녀인듯하다

근데 여전히 if문을 사용하고 싶으면 저렇게 @Mapper 어노테이션을 붙이고
"""
<script.>
</script.>
"""
이렇게 작성할 수 있다고 한다

또 영속성 컨텍스트와 관련하여 다시 리마인드 하는 시간이 있었는데 1차 캐시, 2차 캐시에 대한 내용이 아리송했었는데 트랜잭션과 함께 묶어서 보니 이해가 되는듯 하다.

트랜잭션 말이 나온김에 특징 리마인드!

  • 원자성 (Atomicity)
  • 일관성 (Consistency)
  • 독립성 (Isolation)
  • 지속성 (Durability)

또 여기서 트랜잭션은 Commit, Rollback 연산의 개념이 등장하는데 insert쿼리가 아직 날라가지 않은 상태에서 db에서 조회하기 전에 1차 캐시에서 조회하기에 em.persist와 같이 영속성 컨택스트에 띄워놓은 상태에서는 조회가 가능하다

마지막으로 generationType.Identity로 설정 되어 있는 경우 생성쿼리는 쓰기지연이 발생하지 못한다!
프로젝트를 할때 항상 저 문제로 Identity를 일단 AUTO로 바꾸고 했는데 이젠 그 원인을 알것만 같다

https://github.com/mybatis/spring-boot-starter/blob/master/mybatis-spring-boot-samples/mybatis-spring-boot-sample-annotation/src/main/java/sample/mybatis/annotation/mapper/CityMapper.java

profile
주니어 개발자를 꿈꾸며

0개의 댓글