[작성일: 2023. 05. 04]
2024.08.24 - [WEB/Back-End] - [Spring] 전체 건수 반영하기
[Spring] 전체 건수 반영하기
[작성일: 2023. 05. 02] 2024.08.24 - [WEB/Back-End] - [Spring] paging [Spring] paging[작성일: 2023. 04. 30] 2024.08.24 - [WEB/Back-End] - [Spring] 게시판(Board) 만들기 [Spring] 게시판(Board) 만들기[작성일: 2023. 04. 23] 게시판
eenzhd.tistory.com
검색처리
단일 항목 검색
- 제목 / 내용 / 작성자
다중 항목 검색
- 제목, 내용 / 제목, 작성자 / 내용, 작성자
- 제목, 내용, 작성자
- 등 검색 처리에 유용한 MyBatis의 동적 태그들이 존재
MyBatis의 동적 태그(XML)
- if
- choose(when, otherwise)
- where
- trim
- foreach
if
- 검색 조건이 'T' : 제목에 키워드가 포함된 항목 검색
<if test="type == 'T'.toString()">
(title like '%' || #{keyword} || '%') ex) %전설%
</if>
- 검색 조건이 'C' : 내용에 키워드가 포함된 항목 검색
<if test="type == 'C'.toString()">
(content like '%' || #{keyword} || '%')
</if>
choose
<choose>
<when test="type == 'T'.toString()">
</when> // else if 느낌
...
<otherwise> // else 느낌
(title like '%' || #{keyword} || '%' OR ...)
</otherwise>
</choose>
where
select * from 테이블명
<where>
<if test="bno != null">
bno = #{bno}
</if>
</where>
trim
- bno가 null일 경우 where rwonum = 1
- bno가 null이 아닐 경우 where bno = 전달값 and rownum = 1
select * from 테이블명
<where>
<if test="bno != null">
bno = #{bno}
</if>
<trim prefixOverrides="and">
rownum = 1
</trim>
</where>
foreach
- List, 배열, Map을 이용해서 루프 처리
- prefix : 앞에 붙을 단어
- prefixOverrides : 앞에 붙을 단어는 맞고 맨 앞에만 제거
- suffix
- suffixOverrides
// 파라미터
Map<String, String> map = new HashMap<>();
map.put("T", "TTTT");
map.put("C", "CCCC");
// 쿼리
select * from 테이블명
<trim prefix="where (" prefixOverrides="OR">
<foreach item="val" index="key" collection="map">
<trim prefix="OR">
<if test="key == "T".toString()">
title=#{val}
</if>
<if test="key == "C".toString()">
content=#{val}
</if>
</trim>
</foreach>
</trim>
// 결과
select * from 테이블명 where(content = 'CCCC' OR title = 'TTTT');
검색 기능 구현
Criteria.java
- type, keyword 추가
- 검색 유형 구분을 위한 메서드 추가\
BoardMapper.xml
- <include> 기능을 이용하여 효율적인 SQL 작성하기
- 데이터 검색 기능 + 데이터 리스트 조회가 하나의 쿼리에 있으면 여러 곳의 쿼리에 해당 기능이 필요한 경우 코드의 중복이 발생할 수 있음.
where bno > 0
and (title like '%AAA%' or content like '%AAA%')
🐣 해당 게시글은 입문 개발자가 요약/정리한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.