org.apache.ibatis.binding.BindingException: Parameter '변수명' not found
xml파일의 여러 쿼리문 중 딱 하나의 쿼리문에서만 매핑오류 발생.
service에서 mapper로 넘어가는 부분에서 로직이 멈추고,
서비스 로직에서 에러 로그를 출력해보니 아래처럼 나온다.
org.mybatis.spring.MyBatisSystemException: null
이유를 찾아보니 대부분 변수명 혹은 parameterType 오타문제라는데 오타는 없었음.
(String param1, String param2) 로 전달하던 파라미터를
(Map<String, object> param)의 형태로 변환해서 전달해줬더니 오류없이 성공.
Build - Rebuild Project 과정에서 두번째 오류 발생.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [org/mybatis/spring/boot/autoconfigure/MybatisAutoConfiguration.class]: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception with message: Failed to parse mapping resource: 'file [D:\경로\프로젝트명\out\production\resources\mybatis\파일명.xml]'
MyBatis가 **sqlSessionFactory**를 생성하는 과정에서 파일명.xml 파일을 파싱하지 못한 경우 발생하는 오류.
그런데 경로가 out 폴더 내부의 xml파일을 잡고있다.
잘못된 경로의 잘못된 파일을 잡고있음!!!!
MyBatis가 out 폴더를 참조하지 않도록 설정
1. application.properties 설정.
mybatis:
mapper-locations: classpath:mybatis/*.xml
2. Projec Structure 설정
File > Project Structure > Modules에서 out 폴더를 Excluded로 설정
둘다 되어있긴 했다...
캐시를 한번 지워주고 File > Invalidate Caches / Restart
다시 Build > Rebuild Project
오류없이 잘된다.
그래도 일단 out폴더 자체를 삭제해줬다.
정리해보자면
1. 빌드오류 원인
=> IntelliJ가 빌드 출력 디렉토리(out/production/resources)를 클래스패스로 포함.
2. 쿼리오류 원인
=> 1번에 의해 MyBatis가 out/production/resources와 src/main/resources의 매퍼 XML 파일을 동시에 로드.
=> 동일한 파일을 두 번 로드하면 MyBatis는 중복된 매퍼 SQL(namespace와 id)을 덮어쓰거나 충돌.
파라미터를 String에서 Map으로 변경했을 때는 잠시 중복을 피해서 오류가 안났던것! 이후에 또 오류가 났을듯!?
결국 빌드 과정에서 중복된 리소스 파일로 인한 오류!!!
Gradle은 build 폴더로 빌드 결과물이 나오고
IntelliJ 는 out 폴더로 빌드 결과물이 나온다.
빌드 설정은 Settings - Build, Execution, Deployment - BuildTools - Gradle 에서 가능.
https://pamyferret.tistory.com/62
Build Gradle vs IntelliJ IDEA
작년에 처음 IntelliJ IDEA를 사용하기 시작하면서 이클립스와는 다른 단축키들을 익혔었다. 그 중 하나가 Gradle Project를 Gradle로 빌드 할건지 IntelliJ IDEA로 빌드할 것이지 설정이었다. 처음에는 기본
pamyferret.tistory.com
빌드방식 차이점 비교 (증분빌드)
https://bombo96.tistory.com/72
gradle build vs Intellij IDEA build
개발바닥 오픈채팅방에서 호돌님이 인프런에서 질문자의 문제를 해결하는 과정에 있어서 Build Tools를 Gradle로 설정해야만 오류가 발생하지 않고 Intellij로 설정하면 오류가 발생한다는 원인을 발
bombo96.tistory.com
'Java > 오류' 카테고리의 다른 글
[오류 / STS] 기본 클래스 com.(경로).TestApplication을(를) 찾거나 로드할 수 없습니다. (0) | 2025.02.27 |
---|---|
[오류] ClassNotFoundException 오류 (자바 버전 오류) + 컨테이너 생성오류 (0) | 2024.12.15 |
[오류 / IntelliJ] error: (패키지명) does not exist (0) | 2024.04.04 |
[오류] HttpMessageNotReadableException : Required request body is missing (0) | 2024.04.04 |
[오류 / JPA] dentifier of (엔티티) an instance of Entity was altered from A to B (0) | 2024.03.30 |