본문 바로가기

Spring

(77)
SpringBoot- EntityManager 생성법 @PersistenceContext 어노테이션 기존의 EntityManagerFactory로 EntityManger를 생성해서 트랜잭션을 시작해야 했지만 SpringBoot에서는 build.gradle의 dependencies에 "implementation 'org.springframework.boot:spring-boot-starter-data-jpa'" 를 추가함으로써 @PersistenceContext 어노테이션의 사용이 가능하다. 사용 예시는 다음과 같다 MemberRepository.class package jpabook.jpashop; import org.springframework.stereotype.Repository; import javax.persistence.EntityManager;..
SpringBoot- 기본 스프링 부트 설정 설정 스프링 부트 스타터(https://start.spring.io/)에서 설정 설치 라이브러리: thymeleaf, lombok, spring web, springboot devtool, spring data jpa, (h2 data base: DB는 원하는 걸로) 주의점
JPA- 벌크연산 JpqlMain.class package jpql; public class JpqlMain { static Scanner sc = new Scanner(System.in); public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { // 멤버 100명 persist for (int i = 0; i < 100; i++) { Member member = new Membe..
JPA-Join Fetch 패치 조인 jpql select m from Member m join fetch m.team sql SELECT M.*, T.* FROM MEMBER M INNER JOIN TEAM T ON M.TEAM_ID = T.ID join fetch를 하면 원래 가져오려는 테이블과 패치 조인한 테이블을 조인한 테이블을 생성하고, 그 테이블을 가져온다. 예를 들어 DB에 Team 엔티티가 하나 저장되어 있고, Team에는 두개의 Member 엔티티가 컬렉션 형태로 연관되어 있다고 하자. (Team:Member = 일대다) "select t from Team t join fetch t.members"로 Team 엔티티와 연관된 Member 컬렉션을 가져오려고 할 때, Team에 연관된 Member가 두개라서 총 두개..
JPA- 경로 표현식 경로 표현식 상태필드 상태필드는 단순히 값을 저장하기 위한 필드로 엔티티의 내부 멤버 변수라고 생각하면 된다. ex) m.username 연관 필드 연관 필드는 연관관계를 위한 필드이다. - 단일 값 연관 필드 만일 Member 엔티티에 ManyToOne으로 연관된 Team 엔티티가 있다고 하면 이때 m.team은 단일값 연관 필드가 된다. 단일 값 연관 경로는 묵시적 내부 조인이 발생한다. 단순히 말해서 자동으로 TEAM 테이블의 내용이 MEMBER 테이블을 조회할 때 자동으로 조인된다. String query = "select m.team From Member m"; List result = em.createQuery(query, Team.class).getResultList(); 쿼리 출력>>> /..
JPA- 조건식의 사용 CASE 문 일반적으로 case문을 통해서 어떠한 결과를 가져올지 구분을 한다. jpql도 case 문을 지원하기에 다음과 같이 사용이 가능하다. package jpql; public class JpqlMain { static Scanner sc = new Scanner(System.in); public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { Member me..
JPA-타입 표현 jpql에서 enum의 경우 표현하려면 "패키지.enum 클래스.enum 타입"으로 표현해야 한다. Member.class package jpql; import lombok.Getter; import lombok.Setter; import javax.persistence.*; @Entity @Getter @Setter public class Member { @Id @GeneratedValue private Long id; private String username; private int age; @ManyToOne(cascade = CascadeType.ALL) @JoinColumn(name = "TEAM_ID") private Team team; private MemberType type; ... } ..
JPA- 조인 내부 조인 package jpql; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; import java.util.List; public class JpqlMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager();..