코딍코딍
코딩기록
코딍코딍
전체 방문자
오늘
어제
  • 분류 전체보기 (271)
    • 개발 (2)
    • Java (1)
    • 스프링 (28)
    • JPA (11)
    • Git (3)
    • 알고리즘 (160)
      • 백준 (132)
      • 프로그래머스 (8)
      • SWEA (20)
    • 토이 프로젝트 (14)
      • 간단한 Springboot CRUD (1)
      • 게시판 프로젝트 (13)
    • 알고리즘 개념정리 (8)
    • 오류 해결 (13)
    • 보류 (0)
    • AWS (5)
    • 트러블 슈팅 (0)
    • 회고 (3)
    • CS (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

최근 글

티스토리

hELLO · Designed By 정상우.
코딍코딍

코딩기록

JPA

실전! 스프링 부트와 JPA 활용1 정리

2022. 8. 2. 21:14

@PersistenceContext 

@PersistenceContext
private EntityManager em;
  •  엔티티 매니저( EntityManager ) 주입
  • 스프링 부트를 사용하면 @PersistenceContext대신 @Autowired를 쓸 수 있다. 이유는 스프링 데이터 JPA가 지원해주기 때문이다.

 

@PersistenceUnit 

@PersistenceUnit
private EntityManagerFactory emf;

엔티티 매니터 팩토리( EntityManagerFactory ) 주입

 

@Transactional 

스프링에서 트랜잭션 처리를 하기위해선 DB와 관련된, 트랜잭션이 필요한 서비스 클래스 혹은 메서드에 @Transactional 어노테이션을 달아주면된다.
tx.begin();

try {
    --- 메소드 실행 ---
    tx.commit();
} catch (Exception e) {
	tx.rollback();
} finally {
	em.close();
}
  • @Transactional을 붙이면 메소드를 위와 유사한 코드로 감싸서 실행된다.
@Service
@Transactional(readOnly = true)
public class MemberService { 
    @Transactional //join()은 readOnly = false
    public Long join(Member member) { ... }
    ...
}
  • 트랜잭션, 영속성 컨텍스트
  • 클래스 레벨에 선언하면 클래스 내부의 모든 메소드에 적용된다. 추가적으로 메소드에 적용한 것이 우선순위를 가진다.(구체적인 것이 우선!)
  • readOnly=true : 데이터의 변경이 없는 읽기 전용 메서드에 사용, 영속성 컨텍스트를 플러시 하지 않 으므로 약간의 성능 향상(읽기 전용에는 다 적용)
  • 데이터베이스 드라이버가 지원하면 DB에서 성능 향상

테스트 코드에서 쓰면 DB로부터 데이터를 가져오고, 테스트가 끝나면 DB를 원래대로 돌려놓는다. (자동으로 롤백)

@Rollback(false): 테스트 코드 실행 중에 쿼리를 보낸 것들을 테스트 완료 후에도 롤백하지 않게한다.

 

@NoArgsConstructor

  • 파라미터가 없는 필드를 주입해주는 생성자 생성
  • @NoArgsConstructor(AccessLevel.PROTECTED) : 생성자의 접근 제어를 PROTECTED로 설정

 

@AllArgsConstructor

@AllArgsConstructor
public class test { 
    private int age;
}
  • 모든 필드를 주입해주는 생성자 생성

 

@RequiredArgsConstructor

@AllArgsConstructor
public class test { 
    private final int age;
}
  • final 필드만 주입해주는 생성자 생성

 

@Test(expected = IllegalStateException.class))

  • IllegalStateException 예외가 터지면 테스트 성공

 

Test에 resources 생성 후 yml 생성하면 test의 yml을 따른다.

 

@NotEmpty(message = "xxx")

@NotEmpty(message = "회원 이름은 필수 입니다.")
private String name;
  • @NotEmpty는 null 과 "" 를 허용하지 않는다.

@NotBlank

@NotBlank(message = "회원 이름은 필수 입니다.")
private String name;
  • @NotBlank는 null 과 "" 과 " "모두 허용하지 않는다.

 

public String a (@Valid @ModelAttribute MemberForm memberForm, BindingResult result) {}

  • @Valid 뒤에 BindingResult 객체가 있으면 페이지가 튕기지 않고 오류 내용이 BindingResult에 담겨 코드가 정상적으로 실행된다.
  •  if(result.hasErrors()) {} 를 작성하여 오류 발생 시 방안을 세울 수 있다.

'JPA' 카테고리의 다른 글

batch_size대로 in쿼리 개수가 안 나가는 이유!  (2) 2023.05.14
[JPA] 양방향 연관관계 순환 참조 문제 및 해결방법  (0) 2022.12.22
객체지향 쿼리 언어  (0) 2022.07.27
값 타입  (0) 2022.07.27
고급 매핑  (0) 2022.07.26
    'JPA' 카테고리의 다른 글
    • batch_size대로 in쿼리 개수가 안 나가는 이유!
    • [JPA] 양방향 연관관계 순환 참조 문제 및 해결방법
    • 객체지향 쿼리 언어
    • 값 타입
    코딍코딍
    코딍코딍
    ㅎ2

    티스토리툴바