일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 알고리즘
- 스프링
- Servlet
- 인프런
- http
- QueryDSL
- 백준
- 스프링 핵심 기능
- Proxy
- springdatajpa
- JPQL
- kotlin
- JDBC
- db
- 김영한
- jpa
- transaction
- Android
- Greedy
- 그리디
- spring
- Spring Boot
- 스프링 핵심 원리
- Exception
- java
- pointcut
- SpringBoot
- AOP
- 자바
- Thymeleaf
- Today
- Total
목록인프런/[인프런] QueryDsl (28)
개발자되기 프로젝트
1. 순수 JPA Repository -> Querydsl @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 void save(Member member){ em.persist(member); } public Optional findById(Long id){ Member findMember = em.find(Member.class, id..
1. SQL Function 호출 SQL Function은 JPA와 같이 Dialect에 등록된 내용만 호출이 가능함. 2. member를 M으로 변경하는 replace 함수 사용 @Test public void sqlFunction(){ List result = queryFactory .select(Expressions.stringTemplate( "function('replace', {0}, {1}, {2})", member.username, "member", "M")) .from(member) .fetch(); for (String s : result) { System.out.println("s = " + s); } } select function('replace', member1.username,..
1. 쿼리 한번으로 대량 데이터 수정 : 벌크 연산 벌크연산은 영속성 컨텍스트를 거치지 않고 바로 DB에 반영함 즉 벌크연산 후 영속성 컨텍스트와 DB가 다르다. 벌크 연산 후 영속성 컨텍스트를 초기화 해주자. @Test public void bulkUpdate(){ /** * member1 = 10 -> 비회원 * member2 = 20 -> 비회원 * member3 = 30 -> 유지 * member4 = 40 -> 유지 */ long count = queryFactory .update(member) .set(member.username, "비회원") .where(member.age.lt(28)) .execute(); em.flush(); em.clear(); } update Member member..
1. 동적쿼리 두 가지 방법 BooleanBuilder Where 다중 파라미터 사용 2. BooleanBuilder booleanBuilder에 and, or 조건 추가 가능. private List searchMember1(String usernameCon, Integer ageCon) { BooleanBuilder builder = new BooleanBuilder(); if(usernameCon != null){ builder.and(member.username.eq(usernameCon)); //booleanbuild에 and조건 추가 } if(ageCon!=null){ builder.and(member.age.eq(ageCon)); } return queryFactory .selectFrom(..
1. @QueryProjetion DTO의 생성자에 @QUeryProjection 붙여주고 @Data public class MemberDto { private String username; private int age; @QueryProjection public MemberDto(String username, int age) { this.username = username; this.age = age; } public MemberDto() { } } compileQuerydsl을 실행하면 DTO로 Q파일로 만들어줌 ㄷㄷ /** * study.querydsl.dto.QMemberDto is a Querydsl Projection type for MemberDto */ @Generated("com.quer..
1. MemberDto projection할 때 member의 username, age만 projection 하고 싶음. @Data public class MemberDto { private String username; private int age; public MemberDto(String username, int age) { this.username = username; this.age = age; } } 2. JPQL 사용하여 DTO로 조회 순수 JPA에서 DTO를 조회할 때는 new 명령어를 사용 DTO의 package이름을 다 적어줘야해서 귀찮음...... 생성자 방식만 지원함 @Test public void findDtoByJPQL(){ List resultList = em.createQue..
1. 프로젝션 : select의 대상을 지정. 2. 프로젝션 대상이 하나 인 경우 프로젝션 대상이 하나면 타입을 명확하게 지정할 수 있음 프로젝션 대상이 둘 이상이면 튜플이나 DTO로 조회 List result = queryFactory .select(member.username) .from(member) .fetch(); 2. 튜플 조회 프로젝션 대상이 둘 이상일 때 사용 com.querydsl.core.Tuple tuple.get(~)을 통해 데이터 꺼냄. tuple을 repository 계층 내부에서만 사용하고, 외부에는 DTO로 변환하여 내보내자 ㅋㅋ @Test public void tupleProjection(){ List result = queryFactory .select(member.use..
1. 상수 selcrt 안에 Expressions.constant("~~") @Test public void constant(){ List result = queryFactory .select(member.username, Expressions.constant("A")) .from(member) .fetch(); for (Tuple tuple : result) { System.out.println("tuple = " + tuple); } } tuple = [member1, A] tuple = [member2, A] tuple = [member3, A] tuple = [member4, A] 2. 문자 더하기 conacat 사용 ~.stringValue() 문자가 아닌 다른 타입들은 stringValue()..