-
Notifications
You must be signed in to change notification settings - Fork 0
JPA Section1
SH-Seol edited this page May 18, 2024
·
1 revision
@GetMapping("hello")
public String hello(Model model){
model.addAttribute("data", "hello!");
return "hello";
}- model에다 data를 실어서 보내는 것
[application.properties](http://application.properties) → application.yml
- 양이 많아지면 yml이 더 관리하기 쉽다.
spring:
datasource:
url: jdbc:h2:tcp://localhost/~/jpashop//;MVCC=TRUE
username: sa
password:
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
- 이 것을 쓰는 방법은 [docs.spring.io/spring-boot/docs/버전/reference/html/](http://docs.spring.io/spring-boot/docs/버전/reference/html/) 에서 배우면 된다!
- logging에서 hibernate.sql : debug로 해놓으면, hibernate가 남기는 모든 로그를 디버그 모드에서 볼 수 있다.
- show_sql:true와 차이점은 show는 system.out으로 출력, 후자는 로거
- ddl-auto:create는 기존에 가지고 있던 entity들을 지우고 새로 생성한다를 의미
- MVCC는 생략해야 돌아간다! H2 업데이트 이후 생략해도 된다고 한다.
- hibernate.type을 trace로 하면, 로그에 값이 들어간다.
@Test
@Transactional
@Rollback(false)
public void testMember() throws Exception{
//given
Member member = new Member();
member.setUsername("memberA");
//when
Long savedId = memberRepository.save(member);
Member findMember = memberRepository.find(savedId);
//then
Assertions.assertThat(findMember.getId()).isEqualTo(member.getId());
Assertions.assertThat(findMember.getUsername()).isEqualTo(member.getId());
}- 여기서 Transactional이 없으면 에러가 난다.
- 그 이유는 EntityManager를 통한 모든 데이터 변경은 항상 Transaction을 통해서만 이루어지기 때문이다.
- Transactional annotation은 Spring v, Jakarta v가 있는데 Spring을 추천한다.
- @RunWith는 Junit5부터는 생략가능하다.
- @Rollback을 이용하면 H2에 데이터가 사라지지 않고 memberA가 남게 된다.
쿼리 파라미터 로그 남기는 것은 시스템 자원을 사용하므로 개발 단계에서는 편히 사용해도 되지만,
운영시스템에 적용하려면 성능 테스트가 필요하다.