Search

MyBatis에서 객체가 반환되는 과정

Tags
Database
Date
2024/03/07

1. 개요

JPA에서 벗어나 MyBatis를 사용하던 도중 만났던 사소한(?) 시행 착오를 설명해보고자 합니다.

2. 테스트 코드

간단한 테스트 코드를 작성해보았습니다.
@Test void 메모를_작성하고_확인한다() { // given: 테스트에 필요한 데이터와 객체를 준비 String info = "메모를 테스트 합니다"; int page = 1; String uid = "user123"; // 예제에 uid가 누락되어 추가 MemoCreateRequest createRequest = new MemoCreateRequest(uid, info); // when: 실제 작업을 수행 Long memoId = memoService.createMemo(createRequest); System.out.println("생성된 메모 ID: " + memoId); // then: 결과를 검증 Memo findMemo = memoMapper.findMemoById(memoId).orElseThrow( () -> new IllegalArgumentException("메모를 찾을 수 없습니다.") ); List<Memo> memos = memoMapper.findAll(uid, page); assertThat(findMemo.getInfo()).isEqualTo(info); assertThat(memos).hasSize(1); memos.forEach(memo -> System.out.println("메모 내용: " + memo.getInfo())); }
Java
복사
문제가 생겼던 부분은 memoService.createMemo() 를 했음에도 불구하고 반환되는 id 값에 null이 주입되는 것이었습니다.

2. 해결

public Long createMemo(MemoCreateRequest request) { // 요청받은 데이터로 메모 객체 생성 Memo memo = Memo.of(request.getUid(), request.getMemoInfo()); // 메모를 데이터베이스에 저장 memoMapper.insert(memo); // 데이터베이스에 저장되면서 자동으로 할당된 ID 반환 return memo.getId(); }
Java
복사
MyBatis에서는 memoMapper를 통해 데이터를 저장하는 순간 Memo 객체에 id가 주입됩니다.
쉽게 말해서 원래는 비워져 있었지만 insert(혹은 save) 하는 순간에 해당 값이 객체로 들어오게 됩니다.