diff --git a/build.gradle b/build.gradle index 64f9b21..609bd81 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ plugins { - id 'java' - id 'org.springframework.boot' version '2.7.7' - id 'io.spring.dependency-management' version '1.0.15.RELEASE' + id 'java' + id 'org.springframework.boot' version '2.7.7' + id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'hello' @@ -9,19 +9,20 @@ version = '0.0.1-SNAPSHOT' sourceCompatibility = '8' repositories { - mavenCentral() + mavenCentral() } dependencies { - implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' - implementation 'org.springframework.boot:spring-boot-starter-web' - testImplementation 'org.springframework.boot:spring-boot-starter-test' + implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' + implementation 'org.springframework.boot:spring-boot-starter-web' - implementation 'org.springframework.boot:spring-boot-starter-jdbc' - runtimeOnly 'com.h2database:h2' + // implementation 'org.springframework.boot:spring-boot-starter-jdbc' + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + runtimeOnly 'com.h2database:h2' + testImplementation 'org.springframework.boot:spring-boot-starter-test' } tasks.named('test') { - useJUnitPlatform() + useJUnitPlatform() } diff --git a/src/main/java/hello/hellospring/SpringConfig.java b/src/main/java/hello/hellospring/SpringConfig.java index 55f6cc5..7c107fd 100644 --- a/src/main/java/hello/hellospring/SpringConfig.java +++ b/src/main/java/hello/hellospring/SpringConfig.java @@ -1,11 +1,12 @@ package hello.hellospring; +import javax.persistence.EntityManager; import javax.sql.DataSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import hello.hellospring.repository.JdbcTemplateMemberRepository; +import hello.hellospring.repository.JpaMemberRepository; import hello.hellospring.repository.MemberReository; import hello.hellospring.service.MemberService; @@ -13,8 +14,11 @@ public class SpringConfig { private final DataSource dataSource; - public SpringConfig(DataSource dataSource) { + private final EntityManager em; + + public SpringConfig(DataSource dataSource, EntityManager em) { this.dataSource = dataSource; + this.em = em; } @Bean @@ -25,6 +29,7 @@ public MemberService memberService() { public MemberReository memberRepository() { // return new MemoryMemberRepository(); // return new JdbcMemberRepository(dataSource); - return new JdbcTemplateMemberRepository(dataSource); + // return new JdbcTemplateMemberRepository(dataSource); + return new JpaMemberRepository(em); } } diff --git a/src/main/java/hello/hellospring/domain/Member.java b/src/main/java/hello/hellospring/domain/Member.java index dcdacde..e318114 100644 --- a/src/main/java/hello/hellospring/domain/Member.java +++ b/src/main/java/hello/hellospring/domain/Member.java @@ -1,6 +1,14 @@ package hello.hellospring.domain; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Entity public class Member { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; diff --git a/src/main/java/hello/hellospring/repository/JpaMemberRepository.java b/src/main/java/hello/hellospring/repository/JpaMemberRepository.java new file mode 100644 index 0000000..9ed54f2 --- /dev/null +++ b/src/main/java/hello/hellospring/repository/JpaMemberRepository.java @@ -0,0 +1,42 @@ +package hello.hellospring.repository; + +import java.util.List; +import java.util.Optional; + +import javax.persistence.EntityManager; + +import hello.hellospring.domain.Member; + +public class JpaMemberRepository implements MemberReository { + private final EntityManager em; + + public JpaMemberRepository(EntityManager em) { + this.em = em; + } + + @Override + public Member save(Member member) { + em.persist(member); + return member; + } + + @Override + public Optional findById(Long id) { + Member member = em.find(Member.class, id); + return Optional.ofNullable(member); + } + + @Override + public Optional findByName(String name) { + List result = em.createQuery("select m from Member m where m.name = :name", Member.class) + .setParameter("name", name) + .getResultList(); + return result.stream().findAny(); + } + + @Override + public List findAll() { + return em.createQuery("select m from Member m", Member.class) // 객체 대상으로 날리는 쿼리 + .getResultList(); + } +} diff --git a/src/main/java/hello/hellospring/service/MemberService.java b/src/main/java/hello/hellospring/service/MemberService.java index 09f3d8e..d3705e3 100644 --- a/src/main/java/hello/hellospring/service/MemberService.java +++ b/src/main/java/hello/hellospring/service/MemberService.java @@ -3,10 +3,12 @@ import java.util.List; import java.util.Optional; +import org.springframework.transaction.annotation.Transactional; + import hello.hellospring.domain.Member; import hello.hellospring.repository.MemberReository; - +@Transactional public class MemberService { // private final MemberReository memberReository = new MemoryMemberRepository(); diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 3a7e426..fcac93e 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -2,4 +2,7 @@ spring.output.ansi.enabled=always spring.datasource.url=jdbc:h2:tcp://localhost/~/test spring.datasource.driver-class-name=org.h2.Driver spring.datasource.username=sa -spring.datasource.password= \ No newline at end of file +spring.datasource.password= + +spring.jpa.show-sql=true +spring.jpa.hibernate.ddl-auto=none \ No newline at end of file