๐Ÿ๏ธ Spring/JPA

[Spring Data JPA] - ์ฟผ๋ฆฌ ๋ฉ”์†Œ๋“œ ๊ธฐ๋Šฅ

๋ง ๋ž‘ 2022. 7. 28. 17:18
728x90

 

 

 

 

 

 

์ฟผ๋ฆฌ ๋ฉ”์†Œ๋“œ

์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ฟผ๋ฆฌ ๋ฉ”์†Œ๋“œ ๊ธฐ๋Šฅ์€ ๋Œ€ํ‘œ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„์œผ๋กœ ์ฟผ๋ฆฌ ์ƒ์„ฑ
  • @Query๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฆฌํŒŒ์ง€ํ† ๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค์— ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ์ •์˜

 

 

 

 

 

 

 

 

 

 

 

 

๋ฉ”์†Œ๋“œ ์ด๋ฆ„์œผ๋กœ ์ฟผ๋ฆฌ ์ƒ์„ฑ

Optional<Member> findByUsername(String username);

 

์œ„์˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„๋งŒ ์„ค์ •ํ•จ์œผ๋กœ์จ ์ฟผ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ค‘์š”ํ•œ ๊ฒƒ์€ ํ•ด๋‹น ํ•„๋“œ๊ฐ€ ์—”ํ‹ฐํ‹ฐ์— ์กด์žฌํ•ด์•ผ ํ•˜๋ฉฐ, ํ•„๋“œ๋ช…๊ณผ ๋ฉ”์„œ๋“œ ์ด๋ฆ„์ด ๋ฐ˜๋“œ์‹œ ์ผ์น˜ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋ ‡์ง€ ์•Š๋Š”๋‹ค๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๋”ฉ ์‹œ์ ์— ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

 

 

 

 

 

์ˆ ์–ด

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#appendix.query.method.subject

 

Spring Data JPA - Reference Documentation

Example 109. Using @Transactional at query methods @Transactional(readOnly = true) interface UserRepository extends JpaRepository { List findByLastname(String lastname); @Modifying @Transactional @Query("delete from User u where u.active = false") void del

docs.spring.io

์œ„ ์‚ฌ์ดํŠธ์—์„œ find, exist ๋“ฑ์˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ subject keyword๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

 

 

 

ํ•„ํ„ฐ๋ง ์กฐ๊ฑด

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation

 

Spring Data JPA - Reference Documentation

Example 109. Using @Transactional at query methods @Transactional(readOnly = true) interface UserRepository extends JpaRepository { List findByLastname(String lastname); @Modifying @Transactional @Query("delete from User u where u.active = false") void del

docs.spring.io

์œ„ ์‚ฌ์ดํŠธ์—์„œ ๊ฐ€๋Šฅํ•œ ํ•„ํ„ฐ ์กฐ๊ฑด๋“ค๊ณผ ์‚ฌ์šฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

์ถ”๊ฐ€๋กœ ํ•ด๋‹น ๊ธฐ๋Šฅ์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ํŒŒ๋ผ๋ฏธํ„ฐ์— @Param์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

 

 

๊ฒฐ๊ณผ ๊ฐœ์ˆ˜ ์ œํ•œ

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.limit-query-result

 

Spring Data JPA - Reference Documentation

Example 109. Using @Transactional at query methods @Transactional(readOnly = true) interface UserRepository extends JpaRepository { List findByLastname(String lastname); @Modifying @Transactional @Query("delete from User u where u.active = false") void del

docs.spring.io

User findFirstByOrderByLastnameAsc();

User findTopByOrderByAgeDesc();

Page<User> queryFirst10ByLastname(String lastname, Pageable pageable);

Slice<User> findTop3ByLastname(String lastname, Pageable pageable);

List<User> findFirst10ByLastname(String lastname, Sort sort);

List<User> findTop10ByLastname(String lastname, Pageable pageable);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

@Query

์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰ํ•  JPQL์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ž…๋‹ˆ๋‹ค.

 

 

๋‹ค์Œ์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

public interface MemberRepository extends JpaRepository<Member, Long> {

    @Query("select  m from  Member  m where m.username =: username and m.age = :age")
    List<Member> findUser(@Param("username") String username, @Param("age") int age);
}

 

์œ„์™€ ๊ฐ™์ด ๋ฉ”์†Œ๋“œ ์œ„์— ์‹คํ–‰ํ•  ์ฟผ๋ฆฌ๋ฅผ ๋ฐ”๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ฉ”์†Œ๋“œ ์ด๋ฆ„์œผ๋กœ ์ฟผ๋ฆฌ๋Š” ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋Š˜์–ด๋‚ ์ˆ˜๋ก ์ด๋ฆ„์ด ๊ธธ์–ด์ง„๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์„ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

@Query๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ @Param์„ ํ†ตํ•ด ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ์ง„ํ–‰ํ•ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

ํŠน์ • ๊ฐ’ ์กฐํšŒํ•˜๊ธฐ

public interface MemberRepository extends JpaRepository<Member,Long> {

    @Query("select m.username from  Member  m")
    List<Member> findUsernames();
}

 

 

 

 

 

DTO ๋ฐ”๋กœ ์กฐํšŒํ•˜๊ธฐ

public interface MemberRepository extends JpaRepository<Member,Long> {

    @Query("select new study.datajpa.dto.MemberDto(m.id, m.username, m.age) from  Member  m")
    List<Member> findUserDtos();
}

 

 

 

 

IN์ ˆ ์‚ฌ์šฉํ•˜๊ธฐ

public interface MemberRepository extends JpaRepository<Member,Long> {

    @Query("select m from  Member m where m.username in :names")
    List<Member> findUsernames(@Param("names") List<String> names );
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Reference

 

์‹ค์ „! ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋Š” ๊ธฐ์กด์˜ ํ•œ๊ณ„๋ฅผ ๋„˜์–ด ๋งˆ์น˜ ๋งˆ๋ฒ•์ฒ˜๋Ÿผ, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๊ตฌํ˜„ ํด๋ž˜์Šค ์—†์ด ์ธํ„ฐํŽ˜์ด์Šค ๋งŒ์œผ๋กœ ๊ฐœ๋ฐœ์„ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ˜๋ณต ๊ฐœ๋ฐœํ•ด์˜จ ๊ธฐ๋ณธ CRUD ๊ธฐ๋Šฅ๋„ ๋ชจ๋‘ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค

www.inflearn.com

 

 

 

 

 

 

 

728x90