spring data jpa : jpa vs spring-data-jpa

This commit is contained in:
haerong22
2021-08-30 22:11:03 +09:00
parent 513d012814
commit b868e9a030
8 changed files with 137 additions and 1 deletions

View File

@@ -21,6 +21,8 @@ repositories {
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.7'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'

View File

@@ -0,0 +1,25 @@
package com.example.springdatajpa.entity;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
@Getter @Setter
public class Member {
@Id @GeneratedValue
private Long id;
private String username;
protected Member() {
};
public Member(String username) {
this.username = username;
}
}

View File

@@ -0,0 +1,23 @@
package com.example.springdatajpa.repository;
import com.example.springdatajpa.entity.Member;
import org.springframework.stereotype.Repository;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@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);
}
}

View File

@@ -0,0 +1,7 @@
package com.example.springdatajpa.repository;
import com.example.springdatajpa.entity.Member;
import org.springframework.data.jpa.repository.JpaRepository;
public interface MemberRepository extends JpaRepository<Member, Long> {
}

View File

@@ -0,0 +1,18 @@
spring:
datasource:
url: jdbc:h2:tcp://localhost/~/Desktop/study/Study/spring-data-jpa
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

View File

@@ -0,0 +1,31 @@
package com.example.springdatajpa.repository;
import com.example.springdatajpa.entity.Member;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.Rollback;
import org.springframework.transaction.annotation.Transactional;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
@Transactional
@Rollback(value = false) // 롤백 false
class MemberJpaRepositoryTest {
@Autowired MemberJpaRepository memberJpaRepository;
@Test
void testMember() {
Member member = new Member("memberA");
Member savedMember = memberJpaRepository.save(member);
Member findMember = memberJpaRepository.find(savedMember.getId());
assertEquals(findMember.getId(), member.getId());
assertEquals(findMember.getUsername(), member.getUsername());
assertEquals(findMember, member); // findMember == member : 같은 트랜잭션 안에서는 영속성 컨텍스트 동일성 보장
}
}

View File

@@ -0,0 +1,31 @@
package com.example.springdatajpa.repository;
import com.example.springdatajpa.entity.Member;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.Rollback;
import org.springframework.transaction.annotation.Transactional;
import static org.junit.jupiter.api.Assertions.assertEquals;
@SpringBootTest
@Transactional
@Rollback(value = false)
public class MemberRepositoryTest {
@Autowired MemberRepository memberRepository;
@Test
void testMember() {
Member member = new Member("memberA");
Member savedMember = memberRepository.save(member);
Member findMember = memberRepository.findById(savedMember.getId()).get();
assertEquals(findMember.getId(), member.getId());
assertEquals(findMember.getUsername(), member.getUsername());
assertEquals(findMember, member); // findMember == member : 같은 트랜잭션 안에서는 영속성 컨텍스트 동일성 보장
}
}