인프런 커뮤니티 질문&답변

당무님의 프로필 이미지

작성한 질문수

스프링 DB 2편 - 데이터 접근 활용 기술

MyBatis 적용2 - 설정과 실행

ItemMapper 빈 오류

24.06.17 20:27 작성

·

422

·

수정됨

0

[질문 내용]
안녕하세요, 스프링부트 3.3.0 버전이라서 교재에 나온대로 mybatis-spring-boot-starter 3.0.3으로 추가했는데 다음과 같이 ItemMapper가 빈으로 등록되지 않습니다.

Could not autowire. No beans of 'ItemMapper' type found.

그래서 다른 분들처럼 버전 내려보기도 해봤는데 계속 오류가 뜨네요. 자주하는 질문에 나오는 프로젝트 초기화도 해봤는데 오류가 생깁니다. 한번 봐주시면 감사하겠습니다.

구글 드라이브 https://drive.google.com/file/d/1EDUWv_GFWyZqOXpXsSuGvkU_ovDC8SWA/view?usp=sharing

답변 2

1

신창호님의 프로필 이미지

2024. 07. 17. 15:39

저도 동일한 에러가 나타나서..
MyBatis의 MapperScan을 사용하여 직접 주입하는 방식으로 해결했습니다..

만약 영한님 강의대로 진행했다면 코드는 아래와 같습니다.

@Configuration
@RequiredArgsConstructor
@MapperScan("hello.itemservice.repository.mybatis") // 추가한 부분, Mapper 인터페이스가 있는 경로
public class MyBatisConfig {

    private final ItemMapper itemMapper;

    @Bean
    public ItemService itemService() {
        return new ItemServiceV1(itemRepository());
    }

    @Bean
    public ItemRepository itemRepository() {
        return new MyBatisItemRepository(itemMapper);
    }
}


(그리고 내부적으로 먼가 꼬여있었는지..? 이후에 MapperScan을 주석처리하면 신기하게도... 찾아가는 경우가 생기더라고요.. )

0

OMG님의 프로필 이미지

2024. 06. 18. 00:42

안녕하세요. 당무님, 공식 서포터즈 OMG입니다.

제 개발 환경인 인텔리제이 유료버전/무료버전에서 문제 없이 동작합니다.

오히려 빈 주입 오류보다는 itemMapper의 쿼리 오류가 발생하더라구요.

 

<insert id="save" useGeneratedKeys="true" keyProperty="id">
insert into item (item_name, price, quantitiy)
values (#{itemName}, #{price}, #{quantity})
</insert>

 

올리신 코드를 다운로드 받아서 인텔리제이에서 다운로드 받은 프로젝트를 열어서 확인해보시겠어요?

동일한 상황이라면 build.gradle을 아래의 빨간 부분의 3.3.0 대신 3.2.x로 변경하고 자바 버전을 명시하는 코드도 변경해서 확인해보시겠어요?

 

(변경 후에는 코끼리 버튼을 클릭해주세요 image)

build.gradle

plugins {
id 'java'
id 'org.springframework.boot' version '3.2.3'
id 'io.spring.dependency-management' version '1.1.4'
}


group = 'hello'
version = '0.0.1-SNAPSHOT'

java {
sourceCompatibility = '17'
}

감사합니다.

당무님의 프로필 이미지

작성한 질문수

질문하기