1. 개요
사내 프로젝트에 대한 테스트 코드를 작성하던 도중 다음과 같은 흐름을 발견했습니다.
// Database 클래스
Long insertJournal(Journal journal);
// Service 클래스
...
Long count = journalMapper.insertJournal(journal);
return count;
}
----------------------------------------------------------
// Controller 클래스
...
Long count = journalService.addJournal(uid, journalResponse);
String returnStr = "";
if (count == 1) {
returnStr = "OK";
...
----------------------------------------------------------
SQL
복사
저는 지금까지 save() 혹은 insert() 메소드를 사용하면 해당 객체의 id가 반환되거나 Optional 형태로 반환되는 코드를 봐왔습니다.
그렇기에 위의 코드는 더욱 이해가 안됐는데, 어떻게 이런 흐름이 가능했는지 알아보도록 하겠습니다.
2. MyBatis
우선 그동안 저는 JPA 기반의 프로젝트를 많이 진행해왔던 터라 MyBatis의 동작 흐름을 제대로 이해하지 못하고 있었는데요, 결론부터 말하자면
MyBatis에서는 SQL 구문을 직접 작성하고 실행 결과를 명시적으로 처리합니다. INSERT, UPDATE, DELETE 같은 SQL 구문을 실행할 때, MyBatis는 기본적으로 삽입, 수정, 삭제된 행의 수를 정수 형태로 반환합니다.
즉, 위에서 말한 count = 1 은 행이 하나가 반환됐는가? 즉, 성공적으로 저장됐는지 확인하는 분기문이였습니다.
JPA에서는 네이티브 쿼리를 사용하여 위와 같이 동작시킬 수 있다고 하는데요, 이러한 방식으로도 성공적으로 저장됐는지 확인하는 방법이 있다는 것을 인지하셨으면 좋겠습니다!