스프링 부트와 JPA 활용1 강의를 듣고 정리한 내용입니다.
프로젝트 환경 설정하는 내용은 솔직히 포스팅하지 않고 넘어가려 했는데
기록해두면 다른 프로젝트를 만들 때 참고가 될 것 같아 적으려 한다.
우선 시작은 프로젝트를 만드는 것이다.
https://start.spring.io/
사이트에서 강의에서 사용하는 라이브러리들을 추가하고 설정을 완료한 모습이다.
각 라이브러리가 어떤 역할을 하는지, 어떤 기능을 제공하는지 태그와 설명으로 잘 쓰여져 있다.
GENERATE 버튼을 누르면 해당 설정과 라이브러리들을 사용할 수 있게 구성된 프로젝트를 zip으로 받을 수 있다.
압축을 해제하고 build.gradle을 인텔리제이로 실행하면 된다.
먼저 롬복을 사용하기 위해 intellij에서 설정 해야하는 부분이 있다.
그리고 개발 편의를 위해 실행 속도가 빠른 IntelliJ IDEA를 선택해 실행하도록 한다.
라이브 템플릿 설정 화면
테스트 코드 코딩중에 보여주셨는데 기억해두면 많이 쓸 것 같다.
특히 Thymeleaf 기본 코드같은거 이걸로 작성해두면 편할듯
application.yaml
spring:
datasource:
url: jdbc:h2:tcp://localhost/~/jpabook
username: sa
password:
driver-class-name: org.h2.Driver
jpa:
hibernate:
ddl-auto: create # 실행 시점에 테이블을 drop하고 다시 생성한다.
properties:
hibernate:
format_sql: true
logging:
level:
org.hibernate.SQL : debug
org.hibernate.type : trace
yaml의 들여쓰기는 띄어쓰기 2칸이다.
Member.java
@Entity
@Getter @Setter
public class Member {
@Id @GeneratedValue
private Long id;
private String username;
...
}
MemberRepository.java
@Repository
public class MemberRepository {
@PersistenceContext
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
class MemberRepositoryTest {
@Autowired
MemberRepository memberRepository;
@Test
@Transactional
@Rollback(value = 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());
}
}
나는 JPA 기본편보다 활용1편을 먼저 수강하고 있어서 JPA 관련한 내용들은 정리를 해야겠다.
Spring 입문편에서 간단하게 다뤘던 내용만 기억하고 있다.
JPA를 사용하다보면 다음과 같이 로그를 보여주는데, 이거 말고 실제 쿼리가 궁금한 경우가 있다.
그럴때는
https://github.com/gavlyukovskiy/spring-boot-data-source-decorator
를 참고해 build.gradle에 넣어주면 적용된다.
적용 후 로그