본문 바로가기
WEB/spring

[Spring] 에러: There is no getter for property named 'key' ...

by baam 2022. 8. 30.

mapper.xml 작성 후 테스트 진행을 하는데 다음과 같은 에러를 만났다.

There is no getter for property named 'key' ...

해당 에러를 볼 수 있는 경우는 크게 두 가지가 있는데,

1. VO에 선언된 변수명과 xml에서 사용하는 변수명이 정확하게 일치하지 않아서 발생.

2. 동적 쿼리 내부에서 String이나 Int 등의 타입으로 값을 전달하는 경우.

 

나는 두 번째 경우에 해당했다. 동적 쿼리 if문 내에서 int 타입의 파라미터를 전달받아 쿼리를 작성해서 발생한 문제였다.

이 경우 해결법은 파라미터는 map으로 감싸서 보내주는 방법이 있다.

혹은 변수명을 사용하는 대신 임의 변수 #{value}를 사용해 값을 전달받는 방법도 있지만 앞으로 조건이 더 많이 생길 수 있음을 생각해 map으로 감싸는 방법을 선택했다.

 

public class BoardServiceImplTest {

	private BoardDAO mapper; 
	
	@Autowired
	public void setMapper(BoardDAO mapper) {
		this.mapper = mapper;
	}
	
	@Test
	public void test() {
		
		Map map = new HashMap();
		map.put("boardGroupId", 1);
		
		 log.info("test ing...");
		 log.info(mapper);
		 log.info(mapper.selectAll(map));
	}

}

 

 

<select id="selectAll" resultType="BoardVO" parameterType="hashMap">
    <![CDATA[
    select 
    ]]>	
    <include refid="boardColumns"></include>
    <![CDATA[
    from Board
    where isDel = 0
    ]]>		

    <if test="boardGroupId > 0">
        and boardGroupId = #{boardGroupId}
    </if> 
</select>

댓글