IntelliJ

[Error] java.lang.IllegalArgumentException

HU_717 2024. 11. 21. 00:04

https://hu-studyrecord.tistory.com/79

 

[Spring Boot] java.lang.IllegalArgumentException

MyBatisJava Object와 SQL문 사이의 자동 Mapping 기능을 지원하는 Persitence Framwork이다SQL을 별도의 파일로 분리해서 관리하며, 객체와 SQL 사이의 parameter mapping 작업을 자동으로 처리해준다Mapping ErrSpring Bo

hu-studyrecord.tistory.com

 

  • 이전 포스팅에서는 Mybatis를 사용하던 중 경로 오류에 대해 설명하고 해결하였다
  • 이번에는 Mapper가 같은 이름으로 작성했을 때의 오류를 말하고자 한다
Caused by: java.lang.IllegalArgumentException: Mapped Statements collection already contains key org.example.mybatis02.select. please check file [C:\Java\SpringProjects\mybatis02\build\resources\main\mappers\mapper1.xml] and file [C:\Java\SpringProjects\mybatis02\build\resources\main\mappers\mapper2.xml]
	at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:1071) ~[mybatis-3.5.14.jar:3.5.14]
	at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:1024) ~[mybatis-3.5.14.jar:3.5.14]
	at org.apache.ibatis.session.Configuration.addMappedStatement(Configuration.java:822) ~[mybatis-3.5.14.jar:3.5.14]
	at org.apache.ibatis.builder.MapperBuilderAssistant.addMappedStatement(MapperBuilderAssistant.java:223) ~[mybatis-3.5.14.jar:3.5.14]
	at org.apache.ibatis.builder.xml.XMLStatementBuilder.parseStatementNode(XMLStatementBuilder.java:120) ~[mybatis-3.5.14.jar:3.5.14]
	at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildStatementFromContext(XMLMapperBuilder.java:143) ~[mybatis-3.5.14.jar:3.5.14]
	at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildStatementFromContext(XMLMapperBuilder.java:135) ~[mybatis-3.5.14.jar:3.5.14]
	at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:125) ~[mybatis-3.5.14.jar:3.5.14]
	... 90 common frames omitted
  • 우선, 오류 메시지를 확인하기 위해서는 맨 마지막 오류를 살펴야한다
  • .IllegalArguementException: 뒤를 보면 org.exmple.mybaties.02.select가 이미 있기 때문에 xml 파일을 확인하도록 권장한다
  • 따라서 파일을 살펴보면 mapper1.xml과 mapper2.xml 의 namespace가 동일하여 충돌이 발생했음을 알 수 있었다
  • 이제 아래와 같이 코드를 수정하면 정상적으로 동작하는 것을 확인할 수 있다
<mapper namespace="org.example.mybatis01">
    <select id="select" resultType="String">
        select now() as now
    </select>
</mapper>
<mapper namespace="org.example.mybatis02">
    <select id="select" resultType="String">
        select version() as version
    </select>
</mapper>
  • xml 호출 부분
public String select(){
        return sqlSessionTemplate.selectOne("org.example.mybatis02.select");
    }

 

 

  • 구조가 복잡해짐에 따라 빠르게 코드를 작성하려는 마음보다 오타, 경로 확인을 잘하여 오류 발생을 최소화하려는 노력을 해야한다.