public List<Member> findByEmail(String email) {
return em.createQuery("select m from Member m where m.email = :email ", Member.class)
.setParameter("email", email)
.getResultList();
}
public interface MemberRepository extends JpaRepository<Member, Long> {
@Query("select m from Member m where m.email = :email")
List<Member> findByEmail(@Param("email") String email);
}
- JPQL๊ณผ ๋ค๋ฅด๊ฒ ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์์ ์ ๋ฌธ๋ฒ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ ์ ์๋ค.
- @Param์ด ํ๋ผ๋ฏธํฐ ๋ฐ์ธ๋ฉ ์ญํ ์ ์ํํ๋ค.
- ์ฝ๋๊ฐ ๋ช ํํ๊ณ ๊ฐ๊ฒฐํด์ง๋ค.
DTO
@Data public class MemberDto { private Long id; private String username; private String teamName; public MemberDto(Long id, String username, String teamName) { this.id = id; this.username = username; this.teamName = teamName; } }
@Query ์ฝ๋
@Query("select new study.datajpa.Dto.MemberDto(m.id, m.username, t.name) " + "from Member m join m.team t") List<MemberDto> findMemberDto();
- DTO๋ก ์ง์ ์กฐํ ํ๋ ค๋ฉด JPA์ new ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
- new ๋ช ๋ น์ด ๋ถํฐ ํด๋น DTO ํด๋์ค์ ์์น๋ฅผ ์๋ ค์ค์ผ ํ๋ค.
- ์์ฑ์๊ฐ ๋ง๋ DTO๊ฐ ํ์ํ๋ค.
@Query("select m from Member m where m.username in :names")
List<Member> findByNames(@Param("names") List<String> names);
์คํ๋ง ๋ฐ์ดํฐ JAP๋ ์ ์ฐํ ๋ฐํ ํ์ ์ ์ง์ํ๋ค.
List<Member> findByUsername(String name); //์ปฌ๋ ์
Member findByUsername(String name); //๋จ๊ฑด
Optional<Member> findByUsername(String name); //๋จ๊ฑด Optional
์ปฌ๋ ์ : ๋น ์ปฌ๋ ์ ๋ฐํ(null์ด ์๋๋ฏ๋ก ๋์ฒดํฌ ์กฐ๊ฑด๋ฌธ์ ์์ฐ๋๊ฒ ์ข๋ค)
๋จ๊ฑด ์กฐํ : ๊ฒฐ๊ณผ ์์ผ๋ฉด null ๋ฐํ / 2๊ฑด ์ด์์ด๋ฉด javax.persistence.NonUniqueResultException ์์ธ ๋ฐ์
JPA์์ JPQL๋ก getSingleResult๋ฅผ ์ฌ์ฉํ์ ๋ ๋ฐํ๊ฐ์ด ์์ผ๋ฉด NoResultException์ด ๋ฐ์ํ๋๋ฐ data JPA๋ ๊ฒฐ๊ณผ๊ฐ ์์ด๋ ์์ธ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ด์ null๋ก ๋ฐํ๋๋ค.