오늘은 또 기가 막힌 에러를 겪었다.
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);
}