[Spring] Mapped Statements collection does not contain value for

다람·2024년 4월 5일
0

오류 모음

목록 보기
5/9

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
Error querying database. Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for

실습하는 도중에 UserDAO, UserImpl을 만들고 Mapper와 연동 테스트를 진행하였다.

처음 userMapper.xml만 존재할 때는 MySQL과 연동도 잘 되고 로그인도 잘 진행되는 것을 확인하였다.

게시판을 만들기 위해서 board관련 클래스들을 추가하고 작업을 진행하며

boardMapping.xml도 만들어서 JUnit테스트를 진행하였다.

여기서부터 문제였다…

오전에 시작해서 저녁까지 오류를 찾지 못한….

아무리 찾아봐도 오타도 발견되지 않았고, 경로에도 문제가 없었다..

하나씩 지워가면서 오류나는 부분을 찾으러 가봐도 이상이 없었다.

Mapper 쿼리문을 삭제하면 오류가 나지는 않았지만

쿼리 작업을 하기위해서는 필요한 과정인데!!!!!ㅜㅜ id값을 바꿔도 메소드명을 수정해도 문제가 해결이 되지 않았다…

그러나…!!!!!!

root-context.xml에서 sqlSessionFactory bean을 수정하면서 문제는 해결이 되었다.

기존의 bean을 추가해 줄 때의 코드는 아래와 같았다.

	<bean id="sqlSessionFactory"
		class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="configLocation"
			value="classpath:mybatis-config.xml" />
		<property name="mapperLocations"
			value="classpath:mapper/*Mapper.xml" />
	</bean>

원래라면 문제가 발생하면 안되는 xml 코드이다.

xml 코드에서 *Mapper.xml을 UserMapper.xml로 변경해주니

User테스트는 진행이 되었다.(BoardMapper.xml은 안됨)

결국 Mapper를 찾지 못하는 문제였고

아래과 같이 xml을 변경해 주었다.

오류 해결

	<bean id="sqlSessionFactory"
		class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="configLocation"
			value="classpath:mybatis-config.xml" />
		<property name="mapperLocations"
			value="classpath*:mapper/*Mapper.xml" />
	</bean>

classpath: ⇒ classpath*:

classpath*: 접두사를 사용하여 모든 클래스패스 위치에서 Mapper 파일을 검색하도록 설정 하였다.

오타, 경로 모든게 문제가 되지 않을 경우

classpath에 와일드카드를 붙여보는 것을 추천한다.

profile
개발하는 다람쥐

0개의 댓글