[Spring] Data JPA @Query

๋ฐ•์ค€ํ˜•ยท2023๋…„ 11์›” 6์ผ
0

Spring

๋ชฉ๋ก ๋ณด๊ธฐ
4/17
post-thumbnail

๐Ÿ“Œ๊ธฐ์กด JPQL ์‚ฌ์šฉ์‹œ ์ฝ”๋“œ

public List<Member> findByEmail(String email) {
        return em.createQuery("select m from Member m where m.email = :email ", Member.class)
                .setParameter("email", email)
                .getResultList();
}

๐Ÿ“Œ@Query ์‚ฌ์šฉ์‹œ ์ฝ”๋“œ

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 ๋งคํ•‘ ๋ฐฉ๋ฒ•

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๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

๐Ÿ“ŒDB in ์ ˆ ์ง€์›

@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๋กœ ๋ฐ˜ํ™˜๋œ๋‹ค.

profile
์œผ์Œฐ ์œผ์Œฐ

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด