[[ 검색처리 SQL ]]
=> SQL 문에서 <choose> 태그로 조건문 사용
1. select 태그에서 option 으로 DTO 의 변수 값 하나가 들어오면 ( ex. id , name, title ... )
해당 변수값만을 DTO 에 set 해둔다.
=> 그 DTO 에는 해당 변수값만이 존재하는 상태 ( ex. name 만을 가진 DTO )
@GetMapping("/searchmember")
public String searchmember(String item, String search, Model model) {
memberDTO dto = new memberDTO();
if(item.equals("아이디")) {
dto.setId(search);
}else if(item.equals("이름")) {
dto.setName(search);
}
2. 이 DTO를 SQL 문 변수로 날리고, <choose> 조건문으로 처리한다.
List<memberDTO> searchlist = service.search( dto );
[ SQL ]
<select id="searchlist" resultType="memberdto" parameterType="memberdto">
select * from servletmember where
<choose>
<when test="id != null">
id like concat('%',#{id},'%')
</when>
<when test="name != null">
name like concat('%',#{name},'%')
</when>
</choose>
</select>
: 파라미터로 받아온 DTO 에서 id 가 != null 이면, 즉 값이 있으면
=> select - option 으로 들어와서 set 한 값이 id 라는 뜻
=> id 로 조회 하면 된다.
( 각 변수에 대해 마찬가지로 when 조건문 걸면 된다 )
- % 특수문자와 #{?} 변수값으로 들어온걸 합쳐야하니, SQL 의 concat 을 사용해 합쳐준다.
concat ( A, B, C ) => ABC
( concat : 문자붙이기용 SQL 문법 )
=> select * from member where ( id/name..) like %검색어%
정리
검색어 변수만 set 된 DTO 를 SQL 파라미터로 보냄
1. <choose> 문으로 select-option 찾음 => where XXX( id / name / ... )
2. set 된 변수의 value 값 => %검색어%
=======
추가
[ Map 객체 사용 버전 ]
HashMap 이용
map.put("option", option);
map.put("search", search);
넣어두고 sql.xml에 map을 파라미터로 보낸다.
select * from board where ${option}
like concat ( '%', #{search}, '%' )
- 주의 : option 부분을 #{ } 으로 주게되면 문자열로 받아지게 되므로
where 'title' like
이런 형식이 되어 원하는 결과를 얻을 수 없다.
=> ${ } 로 가져와서 사용
'Back to the Mybatis' 카테고리의 다른 글
[Mybatis] Paging처리 (0) | 2022.08.22 |
---|---|
[Mybatis] + [Spring] 연동 순서 (0) | 2022.08.22 |
[Mybatis] 사용법 (0) | 2022.08.22 |