querydsl

    QueryDSL 페이징 처리

    QueryDSL 페이징 처리

    바로 전 포스팅인 https://yeo-computerclass.tistory.com/413에서 작성한 코드에 이어 페이징 처리를 실습해보겠습니다. Querydsl 페이지 연동 QueryDSL Custom Repository 인터페이스에 페이지 추가 public interface MemberRepositoryCustom { List search(MemberSearchCondition condition); Page searchPage(MemberSearchCondition condition, Pageable pageable); } searchPage() public Page searchPageSimple(MemberSearchCondition condition, Pageable pageable) { Lis..

    QueryDSL 벌크 쿼리

    QueryDSL 벌크 쿼리

    벌크 연산 한 번에 여러 데이터를 수정 혹은 삭제하는 것을 의미합니다. 영속성 컨텍스트를 무시하고 바로 DB에 반영합니다. 영속성 컨텍스트와 DB의 상태가 달라지게 된다는 의미 벌크 연산으로 대량의 데이터를 수정한 후 fetch()로 데이터를 조회했을 때 변경된 DB에서 값이 아닌 이미 영속성 컨텍스트에 존재하는 데이터를 가져오는 문제가 발생합니다. 벌크 연산 이후 변경된 값을 가져오기 위해 EntityManager.flush()와 EntityManager.clear()를 통해서 영속성 컨텍스트 값을 버려야 합니다. 대량 데이터 수정 // 20살보다 어리면 비회원으로 변경하기 long count = jpaQueryFactory .update(member) .set(member.username, "비회원"..

    QueryDSL 동적 쿼리

    QueryDSL 동적 쿼리

    JPA에서 동적 쿼리를 해결하는 방법 조건에 따라 문자열을 만들어 query문을 만들고 파라미터를 주는 방법 JPA Criteria (JPA 표준 스펙) Query DSL를 통한 동적 쿼리 생성 Query DSL 동적 쿼리 만드는 방법 BooleanBuilder Where 다중 파라미터 사용 1. BooleanBuilder @Test void dynamicQueryUsingBooleanBuilder(){ String usernameParam = "member"; Long ageParam = 10; List result = searchMember(usernameParam, ageParam); assertThat(result.size()).isEqualTo(1); } private List searchMem..

    QueryDSL DTO에 값 담기

    QueryDSL DTO에 값 담기

    DTO에 값 담는 방법 프로퍼티 접근 (setter 사용) 필드 접근 생성자 이용 @QueryProjection 어노테이션 1. 프로퍼티 접근 List result = jpaQueryFactory .select(Projections.bean(MemberDto.class, member.username, member.age)) .from(member) .fetch(); Projection.bean ( Class, {field, ... } ) 이 메소드를 사용하면 기본 생성자와 setter를 통해서 객체를 만듭니다. 때문에 DTO에 setter, getter를 설정해주어야 합니다. 2. 필드 접근 List result = jpaQueryFactory .select(Projections.fields(Member..

    QueryDSL 문법

    QueryDSL 문법

    조건 쿼리 import static com.example.querydsl.entity.QMember.member public List findAllMemberByNameAndAge(String username, Integer age) { return jpaQueryFactory.selectFrom(member) .where(member.username.eq(username) .and(member.age.eq(age))) .fetch(); } 검색 조건을 추가(and, or)할 때 체인 형식으로 합니다. 파라미터로 null 값이 들어오면 해당 문법 member.username.eq("member")// username = "member" member.username.ne("member")//username..