728x90
- SQL을 직접 개발자가 작성해야 되는 문제가 있었다
- JPA를 사용하면 SQL을 개발자가 직접 작성하지 않아도 작성해준다.
- JPA를 사용하면, SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환을 할 수 있다.
- JPA를 사용하면 개발 생산성을 크게 높일 수 있다



Spring에서 JPA / Hibernate 초기화 전략 · ID PRAVUS
Spring-data-JPA와 DBMS를 연결해서 사용할 때 간편히 개발환경의 변경사항을 적용하여 테스트 할 수 있다. 특히 테스트를 위한 in-memory Database인 H2 Database를 염두에 둔 DB 초기화 전략에서 신경쓸 점을
pravusid.kr
- Member를 JPA가 자동으로 테이블도 만들어주도록 변경

- JPA가 알아서 테이블 생성해준다.
- 강의에서는 GenerationType을 Identity로 하였지만 오류가 발생하여 Sequence로 하였다.
- H2 DB 같은 경우 기본키 전략으로 Sequence 전략을 사용하고, Sequence 전략 사용 시, 시퀀스 번호를 미리 메모리에 가지고 오는 옵션을 사용하여 성능 최적화를 할 수 있다.
- @SequenceGenerator. allocationSize를 사용하면 된다

[JPA] H2의 @GeneratedValue 문제
개요 프로젝트를 진행하던 도중 아직 User 관련된 기능들이 완성되지 않아서 DB에 초기값을 insert하기 위해 웹 서버를 실행하는 시점에 값을 insert 하기로 결정하였다. 필요한 파일과 설정 준비 우
hyeonic.tistory.com
- JPA Repository 생성
public class JpaMemberRepository implements MemberRepository{
private final EntityManager em;
public JpaMemberRepository(EntityManager em) {
this.em = em;
//springboot가 현재 database 설정정보를 보고 알아서 EntityManager를 만들어 준다
}
@Override
public Member save(Member member) {
em.persist(member);//영속화
return member;
}
@Override
public Optional<Member> findById(Long id) {
Member member = em.find(Member.class,id);
return Optional.ofNullable(member);
}
@Override
public Optional<Member> findByName(String name) {
List<Member> 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<Member> findAll() {
return em.createQuery("select m from Member m",Member.class)//객체 자체를 조회한다
.getResultList();
}
}
- config 변경 후 실행

728x90
'스프링 입문' 카테고리의 다른 글
| Ch07. AOP - AOP가 필요한 상황 (0) | 2021.12.02 |
|---|---|
| Ch06. 스프링 DB 접근 기술 - SpringDataJPA (0) | 2021.12.01 |
| Ch06. 스프링 DB 접근 기술 - 스프링 JdbcTemplate (0) | 2021.12.01 |
| Ch06. 스프링 DB 접근 기술 - 스프링 통합 테스트 (0) | 2021.12.01 |
| Ch06. 스프링 DB 접근 기술 - 순수 JDBC (0) | 2021.12.01 |