백앤드

[Spring] @SuperBuilder 에러, Builder 를 찾지 못했습니다 에러

머리큰개발자 2023. 3. 13. 23:12

오늘은 또 기가 막힌 에러를 겪었다.

Spring에서 extend를 받아 사용할 때,

상위의 Builder annotation을 이용하고 싶은데

갑자기 웬 builder 를 찾지 못했다는 에러가 떴었다.

 

이는 원래는 잘 빌드되던 소스였는데 갑자기 떠서 

굉장히 당황스러운 에러였었다.

 

하지만 SuperBuilder 에 문제가 직접 있는 것은 아니라고 생각했고,

@Repository 어노테이션을 단 DAO에 문제가 있다고 판단했다.

 

DAO를 다시 자세히 보니 @Repository는 문제가 없었고,

MyBatis와 연결되는 @Mapper에 문제가 있었다.

import com.mapstruct.Mapper;
import org.springframework.stereotype.Repository;
import org.apache.ibatis.annotations.Param;
import java.util.List;

@Mapper
@Repository
public interface MyDAO {
	List<int> getMyList(@Param("myNo") String myNo, @Param("myNm") String myNm);
}

아무리 봐도 뭐가 문제인지 몰랐다...

특히 intellij 에서 import 문은 웬만하면...으로 생략되어 있었기 때문에

더더욱 삽질을 했다..

 

근데 자세히보면 Mapper 가 mapstruct로 되어 있는 것을 볼 수 있는데

그냥 ctrl enter로 잘못 import 했기 때문에 발생한 에러였다..

 

결국 @SuperBuilder 는 아무 잘못 없었고, 

Mapper를 잘못 갖고 왔기 때문에 생긴 에러였다.

mapStruct의 Mapper는 Object <-> Object 간 필드를 매핑시키는데

주로 사용하는 것이고

iBatis의 Mapper는 MyBatis의 XML 파일이나 SQL 파일과 매핑시키는데 

사용하는 어노테이션이라서 주의해야 한다...

 

그래서 고친 코드는 아래와 같다.

import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import org.apache.ibatis.annotations.Param;
import java.util.List;

@Mapper
@Repository
public interface MyDAO {
	List<int> getMyList(@Param("myNo") String myNo, @Param("myNm") String myNm);
}