mybatis 를 통해서 db에서 데이터를 조회하려는 도중 아래와 같은 에러가 발생했다.
Cause: java.lang.IndexOutOfBoundsException: Index: 1, Size: 1]
배열의 인덱스와 관련된 것 처럼 보였다.
as-is
@Alias("ClaimSummaryRes")
@Data
@Builder
@ApiModel(description = "클레임 요약 모델")
public class ClaimSummaryRes {
to-be
@Alias("ClaimSummaryRes")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(description = "클레임 요약 모델")
public class ClaimSummaryRes {
<select id="getClaimSummaryForWithdrawal" parameterType="ClaimSummaryReq" resultType="ClaimSummaryRes">
as-is 모델을 보면, Entity 를 별도의 설정자 없이 빌더 패턴으로 생성하고 있다.
resultMap(resultType) 을 사용할 경우 Mybatis가 미리 해당 인스턴스를 생성하게 된다. 하지만 위 엔티티의 경우 모든 인자가 포함된 생성자(Builder)만이 존재하기 때문에 인스턴스를 생성할 수 없어 문제가 발생하는 것이다.
따라서 인자없는 생성자(@NoArgsConstructor) 를 추가하여 해결하고자 한다.
@NoArgsConstructor
파라미터가 없는 기본 생성자를 생성해준다.
@RequiredArgsConstructor
public class Customer {
private final Long id;
private String name;
private int age;
}
Customer customer = new Customer();
argument 를 하나도 넘기지 않고 생성자 호출을 할 수 있다.
Mybatis 는 다음과 같은 순서로 데이터를 생성한다.
1. 기본 생성자를 통해 객체를 생성
2. 생성된 객체에 setter 를 통해 데이터를 변경