일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스프링부트공부
- nestjs스터디
- JPA
- Flutter
- 코테준비
- JPA 공부
- 기술공부
- 스프링
- 플러터 공부
- 코테공부
- querydsl
- DDD
- JPA예제
- nestjs
- nestjs공부
- 스프링공부
- Axon framework
- JPA공부
- Kafka
- 프로그래머스
- 기술면접공부
- 플러터 개발
- K8S
- 스프링 공부
- 카프카
- 스프링부트
- 자바공부
- 알고리즘공부
- JPA스터디
- 자료구조공부
- Today
- Total
목록JPA 공부 (7)
DevBoi
1. ORM이란? Object Relational Mapping 의 약자로, 이름 그대로 객체와 관계형 데이터를 매핑하기 위한 기술이다. 객체와 관계형 데이터 베이스는 패러다임의 불일치가 존재할수 밖에없고, 해당 패러다임을 맞추려, 객체지향적 설계를 할수 없다. ORM은 이러한 문제를 해결한다. 2. JPA java persistence APi의 약자로, 자바 ORM 기술에 대한 API 표준 명세이다. 즉, 인터페이스 모음이다 이 인터페이스를 구현한 프레임워크가 하이버네이트이다. JPA는, 애플리케이션과 JDBC 사이에서 동작하며, JPA를 개발자가 사용하면, JPA 내부에서 JDBC API를 사용하여, SQL을 호출하여 DB와 통신한다. 3. 하이버네이트 JPA를 구현한 프레임워크 중 사실상 표준에 가..
Named 쿼리는 쿼리에 대한 실제 이름을 붙일수있다. 즉 query id 를 부여할수있다. - 정적 쿼리만 가능 - 어노테이션, XML 에 정의 - 애플리케이션 로딩 시점에 초기화 후 재사용 - 애플리케이션 로딩 시점에 쿼리를 검증 sql로 파싱해서, 캐싱하고있다.
SQL 조인 기능이 아니다. JPQL에서 성능 최적화를 위해서 사용된다. 연관된 엔티티나 컬렉션을 SQL 한번에 함께 조회하는 기능이다. join fetch 명령어를 사용한다. 이런식으로 join fetch를 하게 되면 내부적으로 inner join이 발생되어서, 해당 쿼리는 한번만으로 조회를 전부 해온다. Lazy fetch type이여도, 프록시 엔티티가아닌, 실제 엔티티 값으로 가져온다. (Team도) 컬렉션 타입을 공부해보자 이런식으로 팀의 member들에 대한 리스트를 가지고있다고 가정해보자 팀은 총 2개인데, 팀을 가진 member가 3인 경우? 총 3개가 노출이된다. 응? 팀을 select 했는데, 왜 3개가 되지 이런경우 사용되는게 바로, distinct이다. Team 하위 멤버가 2개이면..
jpa는 해당 두개로 페이징을 추상화 했다. 이렇게 하면, 1번째 부터 3개까지, 총 3개를 반환한다. 정말 쉽게 페이징 기능이 구현된다. 개꾸르 추가로 inner join 이나 조인등은 이렇게 사용한다. 자동으로 pk에 대한 ==이 적용된다고 생각하면 된다. 외부 조인도 가능하고, 연관관계가 없는 엔티티 끼리도 외부조인까지 가능하다 하이버네이트 5.1부터는 연관관계가 없는 엔티티끼리도 외부조인이 가능하다 내부조인만 원래는 가능했다고 한다 from 절의 서브쿼리는 JPQL에서 불가능하다고 한다. -> join으로 앵간하면 풀어서 해결한다. 아니면 native SQL로 해결한다. case 문이나, 기타 쿼리도 동일하다. 오라클의 nvl 과 값이 같으면 Null을 반환해주는 펑션들도있으니 유용하게 사용하면 ..
JPQL : java persistance query language JPQL은 엔티티 객체를 대상으로 쿼리한다. JPQL은 SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다. JPQL의 특징 -엔티티와 속성은 대소문자를 구분한다. -JPQL 키워드는 대소문자를 구분하지 않는다. -엔티티 이름을 사용하고, 테이블 이름을 사용하지 않는다. -별칭을 필수이다. TypeQuery, Query TypeQuery -> 반환타입이 정확할때 Query -> 반환타입이 부정확할때 query.getResultList() -> 결과가 하나이상일때, 리스트 반환 -> 결과가 없으면 빈 리스트 반환 query.getSingleResult() -> 결과가 정확하게 하나 여야한다. 둘이상이거나, 0이면, Except..
엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적가능 예_ 회원 엔티티의 키나 나이값을 변경해도 식별자로 인식가능 값 타입 int,Integer,문자열 처럼 단순히 값으로 사용하는 자바 기본타입이나 객체 식별자가 없고, 값만 있으므로 변경시 추적불가 예_숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 된다. -값타입_ 기본값 타입 -자바 기본타입 -int,long -> 공유가 되지 않는 객체 -래퍼 클래스 -Integer,Long -> 공유가 가능하지만, 변경되면 안된다. -String -값타입_임베디드 타입 JPA에서 임베디드한, 데이터 값을 이런식으로 컬럼으로 가질수있다. 이렇게하면, 하위 속성들이 별도 컬럼으로 생성이된다. 이렇게 사용하면 재사용 성이 높고..
JPA 는 개발자가 SQL을 쓰지 않고, 개발을 할수 있게 해준다. 즉, 객체에 SET,GET을 하는 것으로 SELECT, INSERT 작업을 할수 있게해준다. JPA는, Learning curve가 심해서, 자세히 모르고, 실무에 도입하게 되면 망한당 우선 SQL중심적인 개발이, 현재 중요한 키워드이다. CRUD를 짜고, SQL을 짜고.... 애플리케이션 개발이... 객체 지향인데 SQL에 목을 메게된다. SQL 개발의 문제는..? 1. 필드추가할때 한개의 필드가 추가되면, 전체 SQL이 도는 곳에 전체 필드를 추가해줘야한다. 즉 SQL 의존적 개발을 하게된다. 2. 패러다임의 불일치 객체 지향 프로그래밍은 추상화, 캡슐화, 정보은닉, 상속, 다형성등 많은 걸 지원해준다. 객체와 관계형 데이터 베이스의..