일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- QueryDSL
- Spring Boot
- 백준
- 그리디
- Proxy
- kotlin
- Greedy
- 스프링 핵심 원리
- Thymeleaf
- Servlet
- 스프링 핵심 기능
- 자바
- 스프링
- Android
- SpringBoot
- spring
- JPQL
- db
- http
- 김영한
- pointcut
- JDBC
- jpa
- springdatajpa
- 인프런
- Exception
- AOP
- transaction
- java
- 알고리즘
- Today
- Total
목록jpa (149)
개발자되기 프로젝트
1. Member Service @Service : 컴포넌트 스캔 대상, 스프링 빈으로 등록 @Transactional : JPA의 모든 데이터 변경 및 로직은 transaction에서 실행되어야 함. - class에 적용되면 각 메서드마다 적용됨 - 메서드에 추가로 @Transactional이 있다면 메서드에 걸린게 우선순위 높음 - 조회 메서드는 가급적 readOnly = true를 적용하자. @GeneratedValue에 의해 DB마다 전략이 다르긴 하지만 id를 자동으로 생성함. - Persist 시점에 PK인 id는 DB에 저장되기 위해 필요함. - 즉 DB 에 반영되기 이전에도 Persist시점에 PK존재는 보장됨. //@Transactional //JPA의 모든 데이터 변경 및 로직은 tra..
1. 구현 기능 회원 등록 회원 목록 조회 2. MemberRepository @Repository : 컴포넌트 스캔 대상, 스프링 빈으로 등록 @PersistenceContext - JPA 표준 annotation - 스프링이 EntityManager 만들어서 주입해줌. PK로 찾지 않는경우(ex, findByName, findAll) - JPQL 사용해야함 - em.createQuery(JPQL, 조회타입).getResultList - name(parameter)으로 찾는 경우 setParameter(parameterName, parameterValue) 추가됨. - query에서 사용한 parameter와 name을 통해 binding 시켜줌. @Repository //스프링 빈으로 등록, 컴포넌트..
1. 엔티티에는 가급적 Setter를 사용하지 말자 Setter가 모두 열려있으면 변경 포인트가 많아서 유지보수가 어려워진다.. 2. 모든 연관관계는 지연로딩으로 설정! 엄!청!중!요! EAGER타입은 예측이 어렵고, 어떤 SQL이 실행되는지 추적하기 어렵다. - 특히 JPQ을 실행할 때 N+1 이슈가 발생한다. - 만약 A와 B가 일대다 관계인데, EAGER 타입이다? - A불러오는 쿼리 실행하고 n개의 B를 불러오는 쿼리 바로 실행됨 ㄷㄷ JPA Fetch type, N + 1 이슈 1. Fetch Type이란? Entity 를 조회할 경우 해당 Entity와 연관관계에 있는 Entity를 어떻게 가져올 것인지 설정하는 값이다. - 연관 관계에 있는 Entity 를 모두 가져온다 → Eager - 연..
1. 엔티티 클래스 개발 시 주의사항(Getter, Setter), 참고 이론적으로 Getter, Setter 모두 제공하지 않고, 꼭 필요한 별도의 메서드를 제공하는게 가장 이상적. Getter의 경우 모두 열어두는 것이 편리하다. Getter는 아무리 호출해도 호출 해도 값이 변하거나 무슨 일이 일어나지 않는다. 하지만 Setter를 호출하면 데이터가 변한다. Setter를 막 열어두면 엔티티가 왜? 변경되는지 추적하기 어려움 그래서 엔티티를 변경할 때는 Setter 대신에 변경 지점이 명확 하도록 변경을 위한 비즈니스 메서드를 별도로 제공해야 한다 테이블은 관례상 테이블명+id로 사용함. 그래서 column(name="필드명_id")로 했음. 2. 일대다, 다대일 many측에 FK가 있음. many..
1. 도메인 모델 회원과 주문의 관계 : 1 대 N 주문과 배송의 관계 : 1 대 1 카테고리와 상품의 관계 : N 대 N 주문과 상품의 관계 : N 대 N - 그러나 다대다 관계는 관계형 DB, entity에서도 사용하지 않음 - 1 대 N 관계로 풀기 위한 중간에 주문 상품이 존재. 상품을 도서 음반 영화 각각 상속 받음. 2. 엔티티 분석 Member : id(PK), 이름, 입베디드 타입인 Address, Order List를 가진다. Order : 한 번 주문 시 여러 상품 주문 가능함. 따라서 Order와 OrderItem을 일대다 관계. Order는 Item을 주문한 회원과 배송 정보, 주문 날짜, 주문 상태를 가지고 있다. 주문 상태는 열거형을 사용 --> 주문(Order), 취소(CANC..
1. application.yml, 설정하기 datasource 설정 datasource: url: jdbc:h2:tcp://localhost/~/jpashop username: sa driver-class-name: org.h2.Driver --> datasource의 url을 명확하게 h2 콘솔에서 접근하는 url과 동일하게 입력해주자. --> url이 달라서 H2와 연결이 되지 않아 ApplicationContext load fail 발생 jpa 설정 jpa: hibernate: ddl-auto: create Properties: hibernate: show_sql: true format_sql: true - ddl-auto : table 자동 생성 여부 - ddl-auto : create --> ..
1. H2 DB 설치 및 사용법은 이전 글 참고 H2 Database 설치 및 사용 법 2021.05.22 - [JPA] - H2 In-Memory DB H2 In-Memory DB 1. H2 DB 란? DB는 JAVA기반의 경량화된 관계형 DB file 로 저장하여 실제 DB처럼 유지할 수 있고, memory DB로 사용하여 실제 인스턴스가 동작하는 시점에.. bsh-developer.tistory.com DB 파일 생성 방법 - 최초 url : jdbc:hs~/jpashop --> 파일로 접근 - jpasho.mv.db 파일 생성 확인 (사용자 폴더 경로) - 이후 : jdbc:h2:tcp://localhost/~/jpashop --> 네트워크모드로로 접근
1. Thymleaf 사용 template 엔진으로 Thymleaf를 사용 template 엔진? 템플릿과 자료를 합성하여 사용자가 볼 수 있도록 렌더링 해줌 2. Controller 간단한 controller를 구성 @Controller public class HelloController { @GetMapping("hello") public String hello(Model model){ model.addAttribute("data", "hello!"); return "hello"; // 화면이름, html 파일명, resource의 templates하위. } } Model?? - model에 data를 실어서 Controller를 통해 view로 넘길 수 있음 - 생성된 data를 view로 보낼 때..