티스토리 뷰

어제 단 한문장 때문에 에러가 나서 3시간동안 해맨거.....


내가 쓴 문법은 아래와 같았다.




<select id="selectData" parameterType="string" resultMap="dataResultMap">

   SELECT * FROM TABLE

   <if test="name != null">

       WHERE NAME = #{name}

   </if>

</select> 

이렇게 했을 뿐인데


There is no getter for property named 'name' in 'class java.lang.String'

이런 에러가 계속 나타났다.



if문을 지우면 #{name}에는 이상없이 잘 실행된다는거.




이유는

if문에서 name을 가져오는 방식이 parameterType 안에 들어있는 클래스에서

getter 메소드로 name을 받아오기 때문이다.


즉, 에러 그대로 String 객체에 name을 뱉어주는 getter 메소드가 없기 때문이다.

Integer를 넘기거나 Long을 넘긴 사람이라면 다들 안됐을 것이다.




- DTO라고 하나? DOMAIN 객체라고 하나?

그런 게터세터가 있는 객체를 parameterType으로 주고 

그 안의 값을 뽑아 내면 문제 없이 된다.


- Primitive Type의 값도 문제 없이 된다. (int, long 같은 기본 데이터 타입)


- Map 도 문제 없이 된다. 게터가 있으니깐



그래서 결국 스트링 하나때문에 Map으로 스트링 하나를 감싸서 보냈다...



댓글
댓글쓰기 폼