- H2 데이터베이스 설치
- 순수 JDBC
- 스프링 통합 테스트
- 스프링 JdbcTemplate
- JPA
- 스프링 데이터 JPA
스프링 데이터 JPA 추천!
@Entity // JPA 가 관리하는 엔티티가 됨
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Id// P.K.
@GeneratedValue // DB에서 생성해주는 값
GenerationType.IDENTITY // DB가 알아서 생성해주는값
@Column(name = "username")
private String name;
@Column
EntityManager를 주입 받아야 한다.
- P.K. 기반 단건 조회 는 persist(), find() 등으로 처리 가능
- 그 외 조회조건 주거나, 다건 조회 등은 JPQL 작성해줘야 함
// save
em.persist(member);
// findById
Member member = em.find(Member.class, id);
// findByName
List<Member> result = em.createQuery("select m from Member m where
m.name = :name", Member.class)
.setParameter("name", name)
.getResultList();
return result.stream().findAny();
// findAll
// JPQL 쿼리 : 객체를 대상으로 쿼리를 날리면 SQL로 변환됨
return em.createQuery("select m from Member m", Member.class)
.getResultList();
@Transactional
스프링 부트와 JPA만 사용해도 개발 생산성이 정말 많이 증가하고, 개발해야할 코드도 확연히 줄어듭니다. 여기에 스프링 데이터 JPA를 사용하면, 기존의 한계를 넘어 마치 마법처럼, 리포지토리에 구현 클래스 없이 인터페이스 만으로 개발을 완료할 수 있습니다. 그리고 반복 개발해온 기본 CRUD 기능도 스프링 데이터 JPA가 모두 제공합니다.
참고: 실무에서는 JPA와 스프링 데이터 JPA를 기본으로 사용하고, 복잡한 동적 쿼리는 Querydsl이라는 라이브러리를 사용하면 된다. Querydsl을 사용하면 쿼리도 자바 코드로 안전하게 작성할 수 있고, 동적 쿼리도 편리하게 작성할 수 있다. 이 조합으로 해결하기 어려운 쿼리는 JPA가 제공하는 네이티브 쿼리를 사용하거나, 앞서 학습한 스프링 JdbcTemplate를 사용하면 된다.