<insert id="updateProfileImageName">
INSERT INTO profile_image (user_no, upload_name) VALUES (#{userNo}, #{uploadFile.uploadFileName})
ON DUPLICATE KEY UPDATE upload_name = #{uploadFile.uploadFileName}
</insert>
ON DUPLICATE KEY UPDATE
를 사용한 MyBatis 메서드를 만들고 테스트를 해 보았는데 아래와 같은 SQL 문법 오류가 발생했다.
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "INSERT INTO profile_image (user_no, upload_name) VALUES (?, ?)\000a [*]ON DUPLICATE KEY UPDATE upload_name = ?"; SQL statement:
INSERT INTO profile_image (user_no, upload_name) VALUES (?, ?)
ON DUPLICATE KEY UPDATE upload_name = ? [42000-214]
문법에는 이상이 없기 때문에 H2 호환 문제라고 생각했다. 스프링 부트는 테스트 시 별도 설정을 하지 않으면 H2 인메모리 모드를 사용한다. 따라서 아래와 같이 테스트 애플리케이션 설정을 해 주었더니 해결되었다.
spring:
datasource:
url: jdbc:h2:mem:test;MODE=MySQL;