728x90
- Spring DATA JPA는 결국 JPA를 알아야지 한계 없이 사용할 수가 있다.
MemberJpaRepository 구현
@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);
}
public void delete(Member member){
em.remove(member);
}
public List<Member> findAll(){
//JPQL
return em.createQuery("select m from Member m",Member.class)
.getResultList();
}
public Optional<Member> findById(Long id){
Member member = em.find(Member.class, id);
return Optional.ofNullable(member);
}
public long count(){
return em.createQuery("select count(m) from Member m",Long.class)
.getSingleResult();//단건 조회
}
}
- 수정 기능 같은 경우 변경 감지를 통해 Transaction이 종료될 때, 바뀐 부분을 알아서 update를 해주기 때문에 사용하지 않아도 된다.
TeamRepository 구현
@Repository
public class TeamRepository {
@PersistenceContext
private EntityManager em;
//Member Repository랑 CRUD가 비슷하다.
//타입만 다르다.
public Team save(Team team){
em.persist(team);
return team;
}
public void delete(Team team){
em.remove(team);
}
public List<Team> findAll(){
return em.createQuery("select t from Team t",Team.class)
.getResultList();
}
public Optional<Team> findById(Long id){
Team team = em.find(Team.class,id);
return Optional.ofNullable(team);
}
public long count(){
return em.createQuery("select count(t) from Team t",Long.class)
.getSingleResult();
}
}
- 구현을 해보니 실제 타입만 다르고 공통적으로 사용되는 부분이 많이 존재한다.
Test
@Test
@Rollback(value = false)
public void basicCRUD(){
Member member1 = new Member("member1");
Member member2 = new Member("member2");
memberJpaRepository.save(member1);
memberJpaRepository.save(member2);
//단건 조회 검증
Member findMember1 = memberJpaRepository.findById(member1.getId()).get();
Member findMember2 = memberJpaRepository.findById(member2.getId()).get();
assertThat(findMember1).isEqualTo(member1);
assertThat(findMember2).isEqualTo(member2);
findMember1.setUsername("member1!!!!");
/*
//리스트 조회 검증
List<Member> all = memberJpaRepository.findAll();
assertThat(all.size()).isEqualTo(2);
//카운트 검증
long count = memberJpaRepository.count();
assertThat(count).isEqualTo(2);
//삭제 검증
memberJpaRepository.delete(member1);
memberJpaRepository.delete(member2);
long deletedCount = memberJpaRepository.count();
assertThat(deletedCount).isEqualTo(0);
*/
}
728x90
'실전! 스프링 데이터 JPA' 카테고리의 다른 글
| Ch02. 공통 인터페이스 기능 - 공통 인터페이스 분석 (0) | 2021.12.25 |
|---|---|
| Ch02. 공통 인터페이스 기능 - 공통 인터페이스 설정 (0) | 2021.12.25 |
| Ch01. 프로젝트 환경 설정 - 스프링 데이터 JPA와 DB 설정, 동작확인 (0) | 2021.12.24 |
| Ch01. 프로젝트 환경 설정 - H2 데이터베이스 설치 (0) | 2021.12.24 |
| Ch01. 프로젝트 환경 설정 - 라이브러리 살펴보기 (0) | 2021.12.24 |