일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Proxy
- JDBC
- db
- JPQL
- Greedy
- jpa
- QueryDSL
- AOP
- 스프링 핵심 기능
- spring
- transaction
- Thymeleaf
- Spring Boot
- java
- 그리디
- 백준
- Exception
- 자바
- springdatajpa
- 인프런
- 스프링
- Android
- Servlet
- 김영한
- http
- 알고리즘
- 스프링 핵심 원리
- pointcut
- SpringBoot
- kotlin
- Today
- Total
목록인프런/[인프런] 자바ORM 표준 JPA 프로그래밍 (49)
개발자되기 프로젝트
1. 벌크연산이란??? 한 건 딱 찍어서 하는 UPDATE, DELTE제외하고 나머지 재고가 10개 미만인 모~든 상품의 가격을 10% 인상하려면? JPA 변경 감지 기능으로 실행하려면 너무 많은 SQL이 실행됨 재조가 10개 미만인 상품을 리스트로 조회 상품 엔티티의 가격을 10%인상 트랜잭션 커밋 시점에 변경감지 동작 변경된 데이터가 1000이면 1000번 UPDATE SQL날라감 ㄷㄷㄷ JPA도 쿼리 한방에 벌크 연산하도록 지원함 2. 예제 쿼리 한 방에 여러 테이블 로우 변경(엔티티) executeUpdate()의 결과는 영향받은 엔티티의 수를 반환함 UPDATE, DELETE 지원 INSERT(insert into... select, 하이버네이트 지원) int resultCount = em.cr..
쿼리에 이름 부여 가능! 1. Named 쿼리 - 정적 쿼리 미리 정의해서 이름을 부여해두고 사용하는 JPQL 정적 쿼리 어노테티션, XML에 정의 애플리케이션 로딩 시점에 초기화 후 재사용!!!!! JPA/Hibernate가 애플리케이션 로딩 시점에 SQL 파싱하여 캐시해둠. 애플리케이션 로딩 시점에 쿼리를 검증가능!!!!!!! 컴파일 단계에서 에러 잡음 Caused by: org.hibernate.HibernateException: Errors in named queries: Member.findByUserName failed because of: org.hibernate.hql.internal.ast.QuerySyntaxException: Membedddr is not mapped [select m..
1. 엔티티 직접 사용 - 기본 키 값 JPQL에서 엔티티를 직접 사용하면 SQL에서 해당 엔티티의 기본 키 값을 사용함! 엔티티는 DB에서 구분되는 기준이 기본 키임. 따라서 엔티티를 넘겨도 PK를 사용함. JPQL select count(m.id) from Member m //엔티티의 아이디를 사용 select count(m) from Member m //엔티티를 직접 사용 SQL : 위 JPQL 둘다 아래와 같이 동일한 SQL 실행. select count(m.id) as cnt from Member m 엔티티를 파라미터로 전달하는 경우 String jpql = “select m from Member m where m = :member”; List resultList = em.createQuery(..
다형성을 활용하는 경우 JPA가 특정 기능을 제공 1. TYPE 조회 대상을 특정 자식으로 한정 예를들어 Item중에서 Book, Movie를 조회해 JPQL select i from Item i where type(i) IN(Book, Movie) SQL select i from i where i.DTYPE in ('B','M') 2. TREAT(JPA2.1) 자바의 타입 캐스팅과 유사 상속 구조에서 부모 타입을 특정 자식 타입으로 다룰 때 사용 FROM, WHERE, SELECT(하이버네이트지원) 사용 예) 부모인 Item과 자식 Book이 있다. JPQL select i from Item i where treat(i as Book).auther = ‘kim’ SQL select i.* from It..
1. 페치 조인의 특징과 한계 페시 조인 대상에는 별칭을 줄 수 없다. 하이버네이트는 가능, 하지만 가급적 사용하지 말자. fetch join은 나랑 연관된 엔티티를 전부 다 가져옴. 따라서 fetch join에 별칭을 적용하여 탐색 시, 일부만 불러오게 됨. 예를들어 원래 t.members하면 5명이 나와야 하는데 fetch join에 별칭 적용하여 조건을 추가하여 3개가 나왔다고하자. 그러면 이 시점 이후에 t.members를 하면 5명이 아닌 3명만 조회된다. 하지만 JPA 기본 설계는 t.members하면 멤버 전체를 갈 수 있어야 한다. (객체 그래프는 기본적으로 전부 조회할 수 있어야 함) 둘 이상의 컬렉션은 페치 조인할 수 없다.(일 - 다 - 다) 일대다도 데이터 뻥튀기인데 일대다대다는? ..
실무에서 저어어어어어어어ㅓ엉어어어엉말 중요함. 1. fetch join SQL 조인의 종류가 아님 JPQL에서 성능 최적화를 위해 제공하는 기능 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능임. join fetch 명령어 사용 fetch join ::=[LEFT (OUTER) | INNTER] JOIN FETCH 조인경로 쿼리로 내가 원하는 객체 그래프를 어느 시점에 한 번에 조회할 것이라고 정할 수 있는 것. 지연로딩으로 설정해도 fetch join의 우선순위가 높음. 2. Entity fetch join 회원을 조회하면서 연관된 팀도 함께 조회(SQL 한 번에) SQL을 보면 회원 뿐 만 아니라 팀(T.*)도 함께 SELECT JPQL select m from Member m join ..
1.경로 표현식이란? .(점)을 찍어서 객체 그래프를 탐색하는 것. select m.username -> 상태 필드 from Member m join m.team t -> 단일 값 연관 필드 join m.orders o -> 컬렉션 값 연관 필드 where t.name = '팀A' 2. 용어 정리 상태 필드(state field) : 단순히 값을 저장하기 위한 필드 : m.username 연관 필드(association field) : 연관관계를 위한 필드 단일 값 연관 필드 @ManyToOne, @OneToOne, 대상이 엔티티(m.team) 컬렉션 값 연관 필드 @OneToMany, @ManyToMany, 대상이 컬렉션(m.orders) 3. 경로 표현식 특징 상태 필드 : 경로 탑색의 끝임, 더 이..
1. JPQL 기본 함수 CONCAT : 문자 더하기 String query = "select concat('a','b') From Member m"; Hibernate: /* select concat('a', 'b') From Member m */ select ('a'||'b') as col_0_0_ from Member member0_ s = ab SUBSTRING String query = "select substring(m.username, 2, 3) From Member m"; "관리자" -> "리자" 로 잘라냄 ㅋㅋ s = 리자 TRIM LOWER, UPPER LENGTH LOCATE 위치 찾기 예제) abcdefg 중 de의 위치는? String query = "select locate('d..