JPA11 [JPA] QueryDSL에서 SQL Replace 함수 사용하기 QueryDSL을 작성하다 보면 종종 SQL Function을 사용해야 할 상황이 생긴다.필자도 DB에 저장된 휴대폰번호를 동적쿼리로 조회하기 위해 replace 함수를 사용해야 했는데 이를 알아보고자 글을 작성했다. SELECT *FROM EmployeeWHERE REPLACE(phone, '-', '') LIKE %var%MySQL에서 replace를 사용한 예시(이해하기 쉽게 동적 쿼리문을 임의로 작성했습니다) String search = "123"; // 검색할 문자열 (123 부분은 동적으로 들어오는 상황)QEmployee employee = QEmployee.employee;// replace 함수를 포함한 StringTemplate 생성StringTemplate phoneTemplate = .. 2024. 7. 21. [QueryDSL] 중급 문법 (프로젝션, 동적 쿼리) JPA를 쓰다보면 엔티티를 그대로 가져오는 대신, 데이터 전송 객체(DTO)에 담아서 가져오는 경우가 많다.이런 방식은 필요한 데이터만 가져와, 불필요한 엔티티 참조를 줄일 수 있어 성능 최적화와 유지보수에 유리하다.QueryDSL에서도 프로젝션을 사용하여 결과를 DTO, 튜플 형태로 반환받을 수 있는데, 이를 통해 다양한 방법으로 데이터를 처리할 수 있다.이번 글에서는 QueryDSL을 활용한 프로젝션과 동적 쿼리에 대해 중점적으로 다뤄보겠다. 프로젝션QueryDSL을 이용해 Entity 전체를 가져오는 것이 아니라 조회 대상을 지정해 원하는 값만 조회하는 것을 말한다. 프로젝션과 결과 반환 - 기본 먼저 MemberDto는 아래와 같다.@NoArgsConstructor@Datapublic class .. 2024. 6. 20. [QueryDSL] 동적 쿼리 게시물 조회 기능 구현 (기본문법) 요즘 회사 과제로 필터가 적용된 조회 기능을 구현하고 있다.이를 위해 동적 쿼리를 사용한 게시물 조회 기능을 만들고자 QueryDSL을 사용해보려고 한다.개인공부를 위해 작성한 글로 이 글에서는 JPQL과 QueryDSL을 비교하며 기본적인 문법부터 알아보겠습니다. JPQL과 QueryDSL 비교먼저, JPQL을 사용하여 username으로 데이터를 조회하는 예제를 보겠습니다.@Testvoid startJPQL() { Member findMember = em.createQuery("select m from Member m where m.username = :username", Member.class) .setParameter("username", "member.. 2024. 6. 16. 자바 ORM 표준 JPA 기본편 - 영속성 전이 영속성 전이: CASCADE 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶을 때 사용한다.ex) 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장영속성 전이: CASCADE - 주의!영속성 전이는 연관관계를 매핑하는 것과 아무 관련이 없다엔티티를 영속화할 때 연관된 엔티티도 함께 영속화하는 편리함을 제공할 뿐이다 CASCADE의 종류ALL: 모두 적용PERSIST: 영속REMOVE: 삭제MERGE: 병합REFRESH: REFRESHDETACH: DETACH 언제 쓰느냐?하나의 부모가 자식들을 관리할 때 의미가 있다.ex) 게시판과 첨부파일의 관계쓰면 안되는 케이스) 파일을 여러 엔티티에서 관리하면 쓰면 안된다.Child의 고유한 Parent를 가지고 있을 때만 사용(단일.. 2024. 4. 24. 자바 ORM 표준 JPA 기본편 - 프록시와 연관관계 관리 프록시란?실제 엔티티 객체 대신 데이터베이스 조회를 지연할 수 있는 가짜 객체를 의미. 실제 객체를 사용하면 편한데 가짝 객체인 프록시를 쓰는 이유가 뭘까?한 예시를 보고 알아보도록 하겠다. Member를 조회할 때 Team도 함께 조회해야 될까? JPA 관점에서 멤버와 팀을 동시에 조회하는 것은 멤버와 그들의 팀 정보를 함께 출력해야 할 때 유리하지만, 멤버 정보만 필요로 하는 상황에서는 자원의 낭비가 발생할 수 있다.-> 이러한 문제는 프록시를 이용한 지연 로딩 방식으로 해결이 가능하다! 프록시 기초em.find() vs em.getReference()em.find() : 데이터베이스를 통해서 실제 엔티티 객체를 조회em.getReference() : 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 .. 2024. 4. 17. 자바 ORM 표준 JPA 기본편 - 고급매핑 상속관계 매핑 객체의 상속 구조와 데이터베이스의 슈퍼타입 서브타입 관계를 매핑해주는 것 객체는 상속관계가 있다, 관계형 데이터베이스는 상속 관계가 없다. 슈퍼타입, 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 각각 테이블로 변환 ㅡ> 슈퍼타입, 서브타입 테이블을 각각 생성하여 조회할 때 조인을 사용. 조인 전략 통합 테이블로 변환 ㅡ> 테이블을 하나만 사용하여 통합. 단일 테이블 전략 서브타입 테이블로 변환 ㅡ> 서브 타입마다 하나의 테이블을 생성. 구현 클래스마다 테이블 전략 주요 어노테이션 @Inheritance(strategy=InheritanceType.XXX) JOINED: 조인 전략 SINGLE_TABLE: 단일 테이블 .. 2024. 4. 12. 이전 1 2 다음