문제)
org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'search' in 'class java.lang.String'
mybatis 사용 중 파라미터 값으로 search를 받아서 SQL문의 WHERE 조건에 사용하려는데 위와 같이 에러 발생
WHY?)
위의 소스와 같이 search를 String 형식으로 보내주고 SQL 문에서도 parameterType을 String으로 설정해주었기 때문에 문제는 없다. 하지만 SQL 안의 if문에서 사용되는 search의 가져오는 방식이 parameterType 안에 들어있는 클래스의 getter 메소드로 받아오는 방식인데, String은 getter 방식이 아니므로 에러가 발생하게 된 것이다. (if를 사용하지 않고 바로 #{search} 사용하면 에러 발생 하지 X)
해결방법)
1. getter, setter로 구성된 DTO를 만들어서 parameterType을 DTO를 이용한 getter를 사용하거나
ex)
public String getSearch(){
return search;
}
public void setSearch(String search){
this.search = search;
}
2. 아니면 parameterType을 Map을 이용하는 방법이 있다.
3. 근데 위의 두 가지 경우를 사용할 경우 여러가지 번거로운 점이 있다.
그래서 마지막 방법을 사용했는데 이 방법은 단일 파라미터의 경우에 사용 될 수 있는데
search(받아온 변수)가 아니라 임의로 value라는 지정된 이름을 사용하면 알아서 search 값이 value 로 인식되어 돌아가게 된다. (아래 참고) parameterType을 String으로 그냥 두고 search만 value로 바꿔주면 돌아간다.