기능 자체에는 문제가 없지만 개발하는 서비스의 수가 많아지다 보면 그만큼 동일한 유형의 코드가 많이 반복되게 된다.
@RepositorypublicclassMemberJpaRepository{@PersistenceContextprivateEntityManagerem;publicMembersave(Membermember){em.persist(member);returnmember;}publicvoiddelete(Membermember){em.remove(member);}publicList<Member>findAll(){returnem.createQuery("select m from Member m",Member.class).getResultList();}publicOptional<Member>findById(Longid){Membermember=em.find(Member.class,id);returnOptional.ofNullable(member);}publiclongcount(){returnem.createQuery("select count(m) from member m",Long.class).getSingleResult();}//...}
JpaRepository?
기존 JPA만 사용할 때 Repository를 만들 때 비슷한 유형의 코드들이 반복되는 것을 막고자 Spring Data JPA는 JpaRepository라는 인터페이스를 만들어냈다.
해당 인터페이스는 Spring Data JPA에서 기본적으로 제공하는 기능으로 JpaRepository를 상속받은 인터페이스를 사용한다면 기존에 반복되는 유형의 코드들을 생성하지 않아도 된다.