| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |
- 서브쿼리
- Spring data JPA
- Spring
- 성능최적화
- SQL 튜닝
- 스프링
- querydsl
- 스프링 컨테이너
- 자바의 정석
- 페치조인
- 친절한 SQL 튜닝
- TCP/IP
- JPA
- SQL
- 값 타입
- DTO
- 그룹함수
- 컬렉션 조회 최적화
- INDEX SCAN
- 스프링 데이터 JPA
- JPQL
- 오라클
- 데이터베이스
- 페이징
- fetch join
- @MappedSuperclass
- 엔티티
- 데이터모델링
- 정렬
- index
- Today
- Total
목록전체 글 (122)
nu_s
스프링 데이터 JPA가 제공하는 Querydsl 기능 여기서 소개하는 기능은 제약이 커서 복잡한 실무 환경에서 사용하기에는 많이 부족하다. 스프링 데이터에서 제공하는 기능이지만 왜 부족한지 알아보자. 1. 인터페이스 지원 - QuerydslPredicateExecutor QuerydslPredicateExecutor 인터페이스 public interface QuerydslPredicateExecutor { Optional findById(Predicate predicate); Iterable findAll(Predicate predicate); long count(Predicate predicate); boolean exists(Predicate predicate); // _more functionali..
1. 사용자 정의 리포지토리 사용자 정의 리포지토리 사용법 사용자 정의 인터페이스 작성 사용자 정의 인터페이스 구현 스프링 데이터 리포지토리에 사용자 정의 인터페이스 상속 사용자 정의 리포지토리 구성 스프링 데이터 JPA - MemberRepository 생성 public interface MemberRepository extends JpaRepository { List findByUsername(String username); } 1. 사용자 정의 인터페이스 작성 public interface MemberRepositoryCustom { List search(MemberSearchCondition condition); } 2. 사용자 정의 인터페이스 구현 public class MemberReposit..
1. 순수 JPA 리포지토리와 Querydsl 순수 JPA 리포지토리 @Repository public class MemberJpaRepository { private final EntityManager em; private final JPAQueryFactory queryFactory; public MemberJpaRepository(EntityManager em) { this.em = em; this.queryFactory = new JPAQueryFactory(em); } public List findAll_Querydsl() { return queryFactory .selectFrom(member) .fetch(); } public List findByUsername_Querydsl(String ..
1. 벌크 연산 쿼리 한 번으로 대량 데이터 수정 @Test public void bulkUpdate() { long count = queryFactory .update(member) .set(member.username, "비회원") .where(member.age.lt(28)) .execute(); em.flush(); em.clear(); List result = queryFactory .selectFrom(member) .fetch(); for (Member member1 : result) { System.out.println("member1 = " + member1); } } 기존 숫자에 1 더하기 @Test public void bulkAdd() { long count = queryFactor..
동적 쿼리 동적 쿼리를 해결하는 두가지 방법이 있다. BooleanBuilder Where 다중 파라미터 1. BooleanBuilder @Test public void dynamicQuery_BooleanBuilder() { String usernameParam = "member1"; Integer ageParam = 10; List result = searchMember1(usernameParam, ageParam); assertThat(result.size()).isEqualTo(1); } private List searchMember1(String usernameCond, Integer ageCond) { BooleanBuilder builder = new BooleanBuilder(); if (..
1. 기본 조회 1-1 프로젝션 대상이 하나일 경우 List result = queryFactory .select(member.username) .from(member) .fetch(); 프로젝션 대상이 하나면 타입을 명확하게 지정할 수 있다. 프로젝션 대상이 둘 이상이면 튜플이나 DTO로 조회한다. 1-2 튜플 조회 List result = queryFactory .select(member.username, member.age) .from(member) .fetch(); for (Tuple tuple : result) { String username = tuple.get(member.username); Integer age = tuple.get(member.age); } 프로젝션 대상이 둘 이상일 때 ..