스프링데이터 + JPA 112

6. 공통 인터페이스 설정

스프링 부트 사용 시 생략 가능하긴 한데, @SpringBootApplication @EnableJpaRepositories(basePackages = "study.datajpa.repository") public class DataJpaApplication { public static void main(String[] args) { SpringApplication.run(DataJpaApplication.class, args); } } 저렇게 JpaRepository들 어디에 있는지 경로 써줬어야 했음. 근데 스프링 부트 쓰면 그냥 저 그러니까 스프링 실행하는 곳, 여기 포함 및 하위를 그냥 다 스캔함. 그래서 사실 명시할 필요 없음. 우리가, public interface MemberRepositor..

5. 순수 JPA 리포지토리

강의 순서는 순수 JPA 리포지토리 만든다음, 순수 JPA 리포지토리 -> 스프링 데이터 JPA 저 순수 JPA 리포지토리를 똑같은 기능을 가진 스프링 데이터 JPA로 어떻게 만드냐? 이거임 먼저 멤버 리포지토리 @Repository @RequiredArgsConstructor public class MemberJpaRepository { private final EntityManager em; public Member save(Member member){ em.persist(member); return member; } public Member find(Long id){ return em.find(Member.class, id); } public Optional findById(Long id){ Mem..

4. 예제 도메인 모델 구현

우선 간단하게 이런 거 구현 할 거임. 다대일 관계로, DB에서는 당연히 단일방향. 뭐 그러면 엔티티는 일단은 자기가 가지고 있는 원시타입? 은 다 가지고 있을테고, 그럼 memberId, username age 기본적으로 이렇게 있을거고, 팀도 teamId, name 이렇게 있을건데, 연관관계를 어떻게 가져갈까. 일단은 기본적으로 단방향 연관관계로 짜놓는게 훨씬 좋음. 주인도 (mappedBy가 아닌 실제 DB에서 값을 읽어오고 얘의 값이 바뀌면 실제 DB의 값도 바뀌는 곳) 다 쪽이, 그러니까 외래키를 가지고 있는 쪽이 주인이 되는 게 좋음(왜냐하면 엔티티 상에서 외래키를 가지고 있는 쪽이 주인이 아니게 되면 쿼리가 나갈 때 한번 거쳐서 가게 되므로, team이 주인이 되면 팀 -> 멤버, 외래키를 ..

3. 스프링 데이터 JPA, DB 설정, 동작 확인

application.properties보다 application.yml 을 더 선호하신다고.. application.properties를 지우고 만듦. spring: datasource: url: jdbc:h2:tcp://localhost/./datajpa username: sa password: 1234 driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: # show_sql: true format_sql: true logging.level: org.hibernate.SQL: debug # org.hibernate.type: trace 스프링의 데이터 소스는 url, username, passwo..

0. 프리뷰

QueryDSL은 JPQL을 자바 코드로 작성할 수 있게끔 도와주는 오픈소스 라이브러리 JPQL을 자바 코드로 작성하게끔 지원해 주는 건 이것 말고도 여러가지 있긴 한데, 이거는 정말 코드가 직관적이다. JPQL과 거의 유사해서 해석도 쉽다. 쿼리 dsl 쓰려면 우선, 설정을 해 줘야 하는데 이거는 스프링 부트 버전마다 다르다. https://lordofkangs.tistory.com/461 [QueryDSL] QueryDSL 설정하기 ( SpringBoot 2.6이상, SpringBoot 3.x ) QueryDSL 설정은 쉽지않다. 인프런 김영한 강사님의 QueryDSL 강의를 수강하고 있는 학생이라면 QueryDSL 설정에 어려움을 겪고 있을 것이라 예상된다. 아무래도 강사님이 사용하는 버전이 Spr..

0. 프리뷰

스프링 데이터 적용하려면, public interface MemberRepository extends JpaRepository { } JpaRepository을 상속받아 인터페이스를 구현하면 된다. @NoRepositoryBean public interface JpaRepository extends ListCrudRepository, ListPagingAndSortingRepository, QueryByExampleExecutor { void flush(); S saveAndFlush(S entity); List saveAllAndFlush(Iterable entities); @Deprecated default void deleteInBatch(Iterable entities) { deleteAllInB..

17. OSIV 성능 최적화

하이버네이트 : Open Session In View JPA는 Open EntityManager In View 라고 함. 트래픽 많은 서비스에서는 장애가 날 수 있음. 이걸 알아야 함. 스프링 시작할 때, 남기는 WARN이 하나 있다. 2023-11-17T06:33:36.261+09:00 WARN 8448 --- [ restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to..

16. Dto로 조회. 플랫 데이터 최적화 쿼리 하나

컬렉션인 OrderItem까지도 join해서 쿼리 하나로 가져오는 거다. sql로 정말 flat하게 조회 해와야 한다 @Data public class OrderFlatDto { private Long orderId; private String name; private LocalDateTime orderDate; private OrderStatus orderStatus; private Address address; private String itemName; private int orderPrice; private int count; } 저렇게 OrderItem의 내용들까지고 펼쳐놔서 flat하게 만들 것이다. 일단 그러면 가져오려면 public List findAllByDto_flat() { retur..