개발 낙서장

[TIL] 내일배움캠프 66일차 - JPQL concat 본문

Java/Sparta

[TIL] 내일배움캠프 66일차 - JPQL concat

권승준 2024. 4. 1. 21:26

오늘의 학습 키워드📚

JPQL concat

채팅방에 대한 키워드 검색, 해시태그 검색 기능을 구현하던 중 배운 정보이다.

보통 특정 키워드나 태그로 검색을 한다면 like를 많이 사용한다.
채팅방의 제목이나 설명이 ~~ 키워드인 채팅방들을 조회하는 SQL은 다음과 같다.

select
    cr1_0.chat_room_id,
    cr1_0.chat_room_name,
    cr1_0.cover_image,
    cr1_0.created_at,
    cr1_0.description,
    cr1_0.modified_at,
    cr1_0.owner_id
from
    chat_room_tb cr1_0
where
    cr1_0.chat_room_name like '%?%' escape ''
        or cr1_0.description like '%?%' escape '';

SQL로 작성하는 것도 쉽고 QueryDSL로 작성하는 것도 어렵지 않다.
QueryDSL에는 실제로 like가 메소드로 구현돼있기 때문에 특정 칼럼.like 형식으로 구현하면 된다.

근데 JPQL에서는?
처음엔 c.chatRoomName like '%?1%' 이런식으로 했는데 조회가 되지 않았다.
그래서 검색해보니 concat이라는 메소드를 발견했는데 이는 JPQL에서 문자열을 조합해 쿼리를 날려주는 함수라고 한다.

    @Query("select c from ChatRoom c where c.chatRoomName like concat('%', :keyword, '%') or c.description like concat('%', :keyword, '%')")
    List<ChatRoom> findAllByKeyword(@Param("keyword") String keyword);

이 외에도 substring, trim 등 여러가지 기본 메소드가 있다고 한다.


오늘의 회고💬

잘 집중이 되지 않아 진도를 엄청 나가지는 못했다. 그래도 기본적인 기능은 대부분 완료되고 있어서 안정화 단계에 접어들 것 같다.

 

내일의 계획📜

피드백을 받고 다른 도메인들과 합친 다음 추가적으로 구현할 것 같다.

Comments