분류 전체보기
-
[Spring] querydsl - 집합Spring 2022. 1. 3. 16:42
집합 함수 @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 = result.get(0); assertThat(tuple.get(member.count())).isEqualTo(4); assertThat(tuple.get(member.age.sum())).isEqualTo(100); assertThat(tuple.get(member.age.avg())).isEqualTo(25); assertThat(tuple...
-
[Spring] querydsl - 정렬Spring 2022. 1. 3. 01:01
@Test public void sort() { em.persist(new Member(null, 100)); em.persist(new Member("member5", 100)); em.persist(new Member("member6", 100)); List result = queryFactory .selectFrom(member) .where(member.age.eq(100)) .orderBy(member.age.desc(), member.username.asc().nullsLast()) .fetch(); Member member5 = result.get(0); Member member6 = result.get(1); Member memberNull = result.get(2); assertThat..
-
[Spring] querydsl - 결과 조회Spring 2022. 1. 3. 00:56
fetch() : 리스트 조회, 데이터 없으면 빈 리스트 반환 fetchOne() : 단 건 조회 결과가 없으면 : null 결과가 둘 이상이면 : com.querydsl.core.NonUniqueResultException fetchFirst() : limit(1).fetchOne() fetchResults() : 페이징 정보 포함, total count 쿼리 추가 실행 fetchCount() : count 쿼리로 변경해서 count 수 조회 fetchResults의 경우 토탈카운트 기능을 지원하기 때문에 쿼리를 두번 날린다. 주의 : 복잡한 쿼리나 페이징의 경우 fetchResults를 쓰지 않고 쿼리를 두번 날리는 것을 권장함 출처 : 실전! Querydsl - 인프런 | 학습 페이지 (inflea..
-
[Spring] querydsl - 검색 조건 쿼리Spring 2022. 1. 3. 00:53
검색 조건은 기본적으로 .and 와 .or을 이용해 메소드 체인으로 연결할 수 있다. 그밖에 많은 기능들이 제공된다. member.username.eq("member1") // username = 'member1' member.username.ne("member1") //username != 'member1' member.username.eq("member1").not() // username != 'member1' member.username.isNotNull() //이름이 is not null member.age.in(10, 20) // age in (10,20) member.age.notIn(10, 20) // age not in (10, 20) member.age.between(10,30) //b..
-
[Spring] JPAQueryFactory를 필드로 선언하면 어떻게 될까?Spring 2022. 1. 3. 00:45
JPAQueryFactory를 필드로 제공하면 동시성 문제는 어떻게 될까? 동시성 문제는 JPAQueryFactory를 생성할 때 제공하는 EntityManager(em)에 달려있다. 스프링 프레임워크는 여러 쓰레드에서 동시에 같은 EntityManager에 접근해도, 트랜잭션 마다 별도의 영속성 컨텍스트를 제공하기 때문에, 동시성 문제는 걱정하지 않아도 된다. 때문에 springconfig 클래스를 만들어 jpaqueryfactory를 autowired해서 쓰면 굉장히 편하다. 출처 : 실전! Querydsl - 인프런 | 학습 페이지 (inflearn.com)
-
[Spring] 새로운 엔티티를 구별하는 방법Spring 2022. 1. 1. 00:00
spring data jpa의 save함수는 구조는 이런식이다. @Transactional public S save(S entity) { if (entityInformation.isNew(entity)) { em.persist(entity); return entity; } else { return em.merge(entity); } } - 새로운 엔티티면 저장(persist) - 새로운 엔티티가 아니면 병합(merge) 그렇다면 새로운 엔티티를 구별하는 기준은 무엇일까? - 식별자가 객체일 때 null로 판단 - 식별자가 자바 기본타입일 때 0으로 판단 - Persistable 인터페이스를 구현해서 판단로직 변경 가능 JPA 식별자 생성 전략이 @GenerateValue 면 save() 호출 시점에 식별..
-
[Spring] 한 페이지에 페이징 정보가 둘 이상일 경우Spring 2021. 12. 31. 20:35
접두사를 붙여 이를 구분지을 수 있다. - @Qualifier에 접두사명 추가를 한다. ex) {접두사명}_xxx - 예제 : /members?member_page=0&order_page=1 public String list( @Qualifier("member") Pageable memberPageable, @Qualifier("order") Pageable orderPageable, ... 출처 : 실전! 스프링 데이터 JPA - 인프런 | 학습 페이지 (inflearn.com)