스프링 부트 라이브러리 살펴보기
테스트 라이브러리
spring:
datasource:
url: jdbc:h2:tcp://localhost//Users/leekyoungchang/Desktop/Study/Computer/Spring/JPA(pdf, ppt)/스프링 데이터 JPA/db/datajpa
username: sa
password: 1234
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
logging.level:
org.hibernate:SQL : debug
Member - 회원 엔티티
@Entity
@Getter @Setter
public class Member {
@Id
@GeneratedValue
private Long id;
private String username;
protected Member() {
}
public Member(String username) {
this.username = username;
}
}
MemberJpaRepository - 회원 JPA 리포지토리
@Repository
public class MemberJpaRepository {
@PersistenceContext
private EntityManager em;
// 영속성 컨텍스트, 엔티티 매니저
public Member save(Member member) {
em.persist(member);
return member;
}
public Member find(Long id) {
return em.find(Member.class, id);
}
}
MemberJpaRepositoryTest - JPA 기반 테스트
@SpringBootTest
@Transactional
@Rollback(value = false)
class MemberJpaRepositoryTest {
@Autowired MemberJpaRepository memberJpaRepository;
@Test
public void testMember() {
Member member = new Member("memberA");
Member saveMember = memberJpaRepository.save(member);
Member findMember = memberJpaRepository.find(saveMember.getId());
assertThat(findMember.getId()).isEqualTo(member.getId());
assertThat(findMember.getUsername()).isEqualTo(member.getUsername());
assertThat(findMember).isEqualTo(member);
}
}
실행 결과
MemberRepository - 스프링 데이터 JPA 레포지토리
public interfae MemberRepository extends JpaRepository<Member, Long>> {
}
MemberRepositoryTest - 스프링 데이터 JPA 기반 테스트
@SpringBootTest
@Transactional
@Rollback(value = false)
class MemberRepositoryTest {
@Autowired MemberRepository memberRepository;
@Test
public void testMember() {
Member member = new Member("memberA");
Member saveMember = memberRepository.save(member);
Member findMember = memberRepository.findById(saveMember.getId()).get();
assertThat(findMember.getId()).isEqualTo(member.getId());
assertThat(findMember.getUsername()).isEqualTo(member.getUsername());
assertThat(findMember).isEqualTo(member); // JPA 엔티티 동일성
}
}
실행 결과
MemberJpaRepositoryTest와 거의 동일한 코드로 테스트를 돌려보면 실행이 잘되며, 결과가 같습니다
신기하게 MemberRepository에는 interface 밖에 없는데 잘 실해오딥니다
MemberRepository와 MemberRepository가 거의 동일한 것이라고 보면 됩니다
쿼리 파라미터 로그 남기기
로그에 org.hibernate.type을 추가하면 SQL 실행 파라미터를 로그로 남깁니다
외부 라이브러리 : https://github.com/gavlyukovskiy/spring-boot-data-source-decorator를
스프링 부트를 사용하면 이 라이브러리를 추가하면 됩니다
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.7'
참고