- main/resources/application.yml
spring:
datasource:
url: jdbc:h2:tcp://localhost/~/jpashop
username: sa
password:
driver-class-name: org.h2.Driver
jpa:
hibernate:
ddl-auto: create
#이 옵션은 애플리케이션 실행 시점에 테이블을 drop하고, 다시 생성
properties:
hibernate:
#show_sql: true #System.out에 실행SQL 남김
format_sql: true
logging.level:
org.hibernate.SQL: debug #logger를 통해 실행SQL 남김
#org.hibernate.type: trace #SQL 실행 파라미터를 로그로 남긴다
- yml 파일은 띄어쓰기(스페이스) 2칸으로 계층을 만든다. 따라서 띄어쓰기 2칸을 필수로 적어야 한다.
- datasource 는 spring: 하위에 있고 앞에 띄어쓰기 2칸이 있으므로 spring.datasource 가 된다.
- 모든 로그 출력은 가급적 logger를 통해 남겨야 한다.
- show_sql 옵션은 System.out에 하이버네이트 실행 SQL을 남긴다.
- org.hibernate.SQL 옵션은 logger를 통해 하이버네이트 실행 SQL을 남긴다.
- JPA와 DB설정 실제 동작하는지 확인해보자
/**회원 엔티티*/
@Entity
@Getter @Setter
public class Member {
@Id @GeneratedValue
private Long id;
private String username;
}
/**회원 리포지토리*/
@Repository
public class MemberRepository {
@PersistenceContext //스프링이 만들어둔 EntityManager를 빈으로 주입해준다
private EntityManager em;
public Long save(Member member) {
em.persist(member);
return member.getId();
}
public Member find(Long id) {
return em.find(Member.class, id);
}
}
- 테스트 통과!
@RunWith(SpringRunner.class)
@SpringBootTest
public class MemberRepositoryTest {
@Autowired MemberRepository memberRepository;
@Test
@Transactional //JPA를 통한 모든 데이터 변경은 트랜잭션 안에서 실행해야 한다.
//@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.getUsername());
//JPA 엔티티 동일성 보장: 식별자(id)값이 같으면, 같은 엔티티로 인식
Assertions.assertThat(findMember).isEqualTo(member); //findMember==member
}
}
- @Rollback(false) 추가
→ 스프링 부트를 통해 복잡한 설정이 다 자동화 되었다! (persistence.xml 도 없고, LocalContainerEntityManagerFactoryBean 도 없다.)
[Spring 입문9] 스프링 DB 접근 기술: H2 데이터베이스 설치 (tistory.com)
- 쿼리 파라미터 로그 남기기
- application.yml
org.hibernate.type: trace #SQL 실행 파라미터를 로그로 남긴다
- build.gradle
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6'
- 쿼리 파라미터를 로그로 남기는 외부 라이브러리는 시스템 자원을 사용하므로, 운영시스템에 적용하려면 꼭 성능테스트를 하고 사용하는 것이 좋다. (개발 단계에서는 편하게 사용해도됨)
[Spring 입문13] 스프링 DB 접근 기술: JPA (tistory.com)
[Spring 입문4] -스프링 빈과 의존관계: 컴포넌트 스캔과 자동 의존관계 설정 (tistory.com)
728x90
반응형
'JPA Tutorial' 카테고리의 다른 글
[자바 ORM 표준 JPA 프로그래밍 2] ORM 기술, JPA (0) | 2023.09.12 |
---|---|
[자바 ORM 표준 JPA 프로그래밍 1] SQL 중심적인 개발의 문제점 (0) | 2023.09.12 |
[자바 ORM 표준 JPA 프로그래밍 0] JPA 공부 목표 (0) | 2023.09.09 |
[스프링 부트와 JPA 활용 2] 도메인 분석: 도메인 모델과 테이블 설계 (1) | 2023.09.07 |
[스프링 부트와 JPA 활용 0] [웹 어플리케이션 개발] (0) | 2023.09.06 |