[Spring] 검색처리

2024. 9. 6. 02:22·Back-End/Back-End

[작성일: 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%')

 

 

 

 

 

 

 

 

 

 


🐣 해당 게시글은 입문 개발자가 요약/정리한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.

 

저작자표시 비영리 변경금지 (새창열림)
'Back-End/Back-End' 카테고리의 다른 글
  • [Spring] 댓글창 목록 구현하기
  • [Spring] 댓글창 기능 구현하기
  • [Spring] 전체 건수 반영하기
  • [Spring] paging
뚜비
뚜비
1년차 백엔드&iOS 개발자의 감자 탈출 블로그 🥔🥔
  • 뚜비
    뚜비의 개발로그
    뚜비
  • 전체
    오늘
    어제
  • 글쓰기     관리
    • Devlog
      • Back-End
        • Java
        • Spring
        • JPA
        • HTTP
        • Security
        • Back-End
        • Front-End
      • 알고리즘
      • iOS
        • Swift
      • Database
      • Tips
        • Git & GitHub
        • A to Z
      • 프로젝트
      • 생각정리
  • 태그

    프로그래머스
    Database
    Security
    백준
    sql
    김영한
    Swift
    의존성주입
    변수
    Java
    성능최적화
    데이터베이스
    게시판만들기
    최주호
    알고리즘
    spring
    다형성
    생성자
    스프링
    자바
    DB
    jsp
    javascript
    JPA
    객체
    자바스크립트
    HTTP
    Spring Security
    html
    MVC
  • hELLO· Designed By정상우.v4.10.0
뚜비
[Spring] 검색처리
상단으로

티스토리툴바