2022-02-15-TIL

Today I Learned

UPSERT (없으면 INSERT 있으면 UPDATE)

단일 쿼리

쿼리 하나로 다음과 같이 구현할 수 있다.

INSERT INTO USER (
    USER_ID,
    PASSWORD,
    CREATED_DATE,
) VALUES (
    'august17',
    '1234',
    NOW()
) ON DUPLICATE KEY UPDATE

여러번의 쿼리

또는 애플리케이션 코드상에서 UPDATE 쿼리를 먼저 날리고, INSERT 쿼리를 날리면 된다. 하지만 가독성이 매우 떨어져서 의도를 파악하기가 어렵다.

JPA

여러가지 방법들이 있겠지만 일반적으로는 findById 등으로 엔티티를 가져온 다음 save한다. save를 호출하면 해당 엔티티의 키가 없다면 추가하고, 있다면 수정한다.

  • https://kig6022.tistory.com/6
  • https://coding-factory.tistory.com/427
  • https://wiki.postgresql.org/wiki/UPSERT
  • https://www.baeldung.com/spring-data-partial-update
  • https://stackoverflow.com/questions/36241163/spring-jpa-how-to-upsert-without-losing-data

@Data 사용의 장단점

  • https://projectlombok.org/features/Data
  • https://javabydeveloper.com/lombok-data-annotation/

객체 직렬화

  • https://dzone.com/articles/object-serialization-evil