QueryDSL - 동적 쿼리와 성능 최적화 조회(Builder 와 where절 사용)
·
Back-End/queryDSL
Builder사용MemberTeamDto - 조회 최적화용 DTO 추가package study.querydsl.dto;import com.querydsl.core.annotations.QueryProjection;import lombok.Data;@Datapublic class MemberTeamDto { private Long memberId; private String username; private int age; private Long teamId; private String teamName; @QueryProjection public MemberTeamDto(Long memberId, String username, int age, Long teamId, St..
QueryDSL - 실무활용(순수 JPA와 Querydsl 리포지토리 비교, 팩토리 빈 주입받기)
·
Back-End/queryDSL
순수 JPA 리포지토리 생성package study.querydsl.repository;import com.querydsl.jpa.impl.JPAQueryFactory;import jakarta.persistence.EntityManager;import org.springframework.stereotype.Repository;import study.querydsl.entity.Member;import java.util.List;import java.util.Optional;@Repositorypublic class MemberJpaRepository { private final EntityManager em; private final JPAQueryFactory queryFactory; ..
QueryDSL - 동적 쿼리, 벌크 연산, SQL Function 호출
·
Back-End/queryDSL
동적 쿼리BooleanBuilder 사용 @Test public void dynamicQuery_BooleanBuilder() { String usernameParam = "member1"; Integer ageParam = 10; List result = searchMember1(usernameParam, ageParam); Assertions.assertThat(result).hasSize(1); } private List searchMember1(String usernameCond, Integer ageCond) { BooleanBuilder builder = new BooleanBuilder(); if..
QueryDSL - 중급문법(프로젝션과 결과 반환 기본과 DTO, @QueryProjection)
·
Back-End/queryDSL
기본 프로젝션💡프로젝션이란?select대상을 지정하는 행위를 지칭한다.member의 username만 가져오는 경우 → 프로젝션이 1개member의 username과 age 2개를 가져오는 경우 → 프로젝션이 2개대상이 하나인 경우 @Test public void simpleProjection() { List result = queryFactory .select(member.username) .from(member) .fetch(); for (String s : result) { System.out.println("s = " + s); } }하나인 경..
QueryDSL - 기본문법(서브쿼리, Case, 상수와 문자 더하기)
·
Back-End/queryDSL
서브 쿼리JPAExcpressions를 이용해서 서브쿼리를 사용 할 수 있다.서브쿼리 eq 사용 예시 /* * 나이가 가장 많은 회원 조회 * */ @Test public void subQuery() { // 기존에 쓰던 static인 QMember객체 사용시 겹칠수 있어서 서브쿼리용 Qmember 생성 QMember memberSub = new QMember("memberSub"); List result = queryFactory.selectFrom(member) .where(member.age.eq( JPAExpressions ..
QueryDSL - 기본문법(집합, 조인)
·
Back-End/queryDSL
집합 함수 @Test public void aggregation() { List result = queryFactory .select( member.count(), member.age.sum(), member.age.avg(), member.age.max(), member.age.min() ) .from(member) .fetch(); Tuple tuple = ..
QueryDSL - 기본 문법(검색, 결과, 정렬, 페이징)
·
Back-End/queryDSL
QueryDSL - 기본 문법(검색, 결과, 정렬, 페이징)검색 조건 쿼리기본 검색 쿼리@Testpublic void search() { Member findMember = queryFactory .selectFrom(member) .where(member.username.eq("member1").and(member.age.eq(10))) .fetchOne(); assertThat(findMember.getUsername()).isEqualTo("member1");}select from 을 selectFrom으로 합칠수 있음JPQL이 제공하는 모든 검색 조건 제공member.username.eq("member1") // username..
Window 환경에서 Redis 설치하기
·
Back-End/Redis
🧠 개요안녕하세요. 오늘은 Windows 환경에서 Redis를 설치하는 방법에 대해 알아보겠습니다.Redis는 높은 성능과 유연한 데이터 구조를 제공하여, 다양한 백엔드 환경에서 핵심 요소로 활용되고 있습니다.📌 Redis란?Redis(REmote DIctionary Server)는 오픈 소스 기반의 인메모리 데이터 저장소로, Key-Value 구조를 기반으로 데이터를 빠르게 읽고 쓰는 것이 특징입니다.✅ Redis의 주요 특징메모리 기반 저장소로 빠른 읽기/쓰기 속도 제공메모리의 데이터를 디스크에 주기적 백업(RDB, AOF) 가능다양한 데이터 구조 지원: 리스트, 해시, 셋, 정렬된 셋 등풍부한 명령어 지원으로 유연한 데이터 조작 가능다수의 명령어를 하나의 트랜잭션으로 묶어 일관성 보장 가능🛠 ..
JPQL 과 QueryDSL 문법 비교 및 Q-Type활용
·
Back-End/queryDSL
https://www.inflearn.com/course/querydsl-%EC%8B%A4%EC%A0%84/dashboard 실전! Querydsl - 인프런 | 강의Querydsl의 기초부터 실무 활용까지, 한번에 해결해보세요!, 복잡한 쿼리, 동적 쿼리는 이제 안녕! Querydsl로 자바 백엔드 기술을 단단하게. 🚩 본 강의는 로드맵 과정입니다. 본 강의는 자바 백엔www.inflearn.com 테스트 초기 설정@SpringBootTest@Transactionalpublic class QuerydslBasicTest { @Autowired EntityManager em; @BeforeEach public void before() { queryFactory = ne..
데이터 스프링 JPA - 쿼리 메소드 기능(벌크성 수정 쿼리, @EntityGraph, JPA Hint & Lock)
·
Back-End/Spring Data JPA
실전! 스프링 데이터 JPA - 인프런 | 강의 실전! 스프링 데이터 JPA - 인프런 | 강의 스프링 데이터 JPA는 기존의 한계를 넘어 마치 마법처럼 리포지토리에 구현 클래스 없이 인터페이스만으로 개발을 완료할 수 있습니다. 그리고 반복 개발해온 기본 CRUD 기능도 모두 제공합니다. www.inflearn.com 벌크성 수정 쿼리 벌크성 쿼리는 대량의 엔티티 속성을 수정해야 할 때, 사용하는 기능이다. ex) 월급이 300 이상인 사원들의 연봉 10% 인상을 DB에 반영 등 일반 JPA 벌크성 수정 쿼리 public int buikAgePlus(int age) { return em.createQuery("update Member m set m.age = m.age + 1 where m.age >= ..