์ฐธ๊ณ : JPA์์ ์์ ์ ๋ณ๊ฒฝ๊ฐ์ง ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ๋๋ค. ํธ๋์ญ์ ์์์ ์ํฐํฐ๋ฅผ ์กฐํํ ๋ค์์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ฉด, ํธ๋์ญ์ ์ข ๋ฃ ์์ ์ ๋ณ๊ฒฝ๊ฐ์ง ๊ธฐ๋ฅ์ด ์๋ํด์ ๋ณ๊ฒฝ๋ ์ํฐํฐ๋ฅผ ๊ฐ์งํ๊ณ UPDATE SQL์ ์คํํ๋ค.
์์ JPA ๊ธฐ๋ฐ ๋ฆฌํฌ์งํ ๋ฆฌ - ํ์ :
MemberJpaRepository.java
@Repository
public class MemberJpaRepository {
@PersistenceContext
private EntityManager em;
public Member save(Member member) {
em.persist(member);
return member;
}
public void delete(Member member) {
em.remove(member);
}
public List<Member> findAll() {
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();
}
public Member find(Long id) {
return em.find(Member.class, id);
}
}
์์ JPA ๊ธฐ๋ฐ ๋ฆฌํฌ์งํ ๋ฆฌ - ํ :
TeamJpaRepository.java
@Repository
public class TeamJpaRepository {
@PersistenceContext
private EntityManager em;
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();
}
}
์์ JPA ๊ธฐ๋ฐ ๋ฆฌํฌ์งํ ๋ฆฌ ํ ์คํธ :
MemberJpaRepositoryTest.java
@SpringBootTest
@Transactional
@Rollback(value = false)
class MemberJpaRepositoryTest {
@Autowired MemberJpaRepository memberJpaRepository;
@Test
public void testMember() {
Member member = new Member("memberA");
Member savedMember = memberJpaRepository.save(member);
Member findMember = memberJpaRepository.find(savedMember.getId());
assertThat(findMember.getId()).isEqualTo(member.getId());
assertThat(findMember.getUsername()).isEqualTo(member.getUsername());
assertThat(findMember).isEqualTo(member);
}
@Test
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);
// ๋ฆฌ์คํธ ์กฐํ ๊ฒ์ฆ
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);
}
}