springboot initializr
build.gradle
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-devtools' // 컴파일 했을 때 즉시 적용
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6' // 쿼리 파라미터 로그 남기기
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
//JUnit4 추가
testImplementation("org.junit.vintage:junit-vintage-engine") {
exclude group: "org.hamcrest", module: "hamcrest-core"
}
}
tasks.named('test') {
useJUnitPlatform()
}
test {
useJUnitPlatform()
}
application.yml
spring:
datasource:
url: jdbc:h2:tcp://localhost/~/jpashop
username:
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
Member
@Entity
@Getter @Setter
public class Member {
@Id @GeneratedValue
private Long id;
private String username;
}
MemberRepository
@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);
}
}
MemberRepositoryTest
@RunWith(SpringRunner.class) // spring 관련 테스트
@SpringBootTest
public class MemberRepositoryTest {
@Autowired MemberRepository memberRepository;
@Test
@Transactional // 엔티티 매니저를 통한 데이터 변경은 Transaction 내에서 일어남
@Rollback(false) // test에 있으면 rollback 하므로
public void testMember() throws Exception {
//given
Member member = new Member();
member.setUsername("memberA");
//when
Long saveId = memberRepository.save(member);
Member findMember = memberRepository.find(saveId);
//then
Assertions.assertThat(findMember.getId()).isEqualTo(member.getId());
Assertions.assertThat(findMember.getUsername()).isEqualTo(member.getUsername());
Assertions.assertThat(findMember).isEqualTo(member);
}
}
Extract해서 변수 뽑아오기 : Ctrl + Alt + V
참고 강의 :
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 - 인프런 | 강의
실무에 가까운 예제로, 스프링 부트와 JPA를 활용해서 웹 애플리케이션을 설계하고 개발합니다. 이 과정을 통해 스프링 부트와 JPA를 실무에서 어떻게 활용해야 하는지 이해할 수 있습니다., - 강
www.inflearn.com
'JPA > 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발' 카테고리의 다른 글
[스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발] 7. 웹 계층 개발 (0) | 2023.01.06 |
---|---|
[스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발] 3~6. 도메인 개발 (0) | 2023.01.04 |
[스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발] 2. 도메인 분석 설계 (0) | 2023.01.03 |