웹 & 프레임워크

<비공개> 동적쿼리

늘근이 2014. 5. 13. 14:01

<form method="post" action="/director_search.do">

<input type="text" id="name" name="name" />

</form>


이런식으로 알려주면서 동적쿼리를 한번 사용해보자


동기방식으로 먼저 실행해보자 ----------------------------------------------------


인터페이스에 다음을 구현해준다.


List<Director> selectDirectorListByNameOrAge(String name, int age);


서비스와 DAO에 같은 메서드를 추가시킨후에

DAOImpl을 작성하기 시작한다.



public List<Director> selectDirectorListByNameOrAge(String name, int age) {

HashMap<String, Object> map = new HashMap<String, Object>;


if(name != null) {

map.put("name",name);

}


if(age > 0) {

map.put("age",age);

}


return sqlSessionTemplate.selectList("Director.selectDirectorListByNameOrAge",map);


}


그리고 Director.xml에 

<select id="selectDirectorListByNameOrAge" parameterType="map" resultMap="DirectorResultMap">

select director_id,

director_name,

director_age,

director_winnercount

from director <!--여기다가 where절을 포함할수있따-->


<where>

<if test="name != null">

director_name = #{name}

</if>

<if test="age != null">

or director_age = #{age} <!-- or를 붙여주면 붙였다 뗐다 해줌. -->

</if>

</where>

</select>



이제 컨트롤러에 


@RequestMapping("/")

public String searchDirector(String name, int age, Model model) {

model.addAttribute("directorList", directorService.findDirectorListByNameOrAge(name,age));

return "director_list";

}


만 보내주면 된다



혹시 숫자가 와서 버그가 난다면

int age대신 

@RequestParam(value="age",defaultValue="0")int age


이렇게 넣어주면 변환에 실패할일은 없다


빈스트링값 조심하기