๐Ÿ“Œ JPQL์ด๋ž€?

My Pale Blue Dotยท2025๋…„ 5์›” 7์ผ
0

SPRING BOOT

๋ชฉ๋ก ๋ณด๊ธฐ
6/40
post-thumbnail

๐Ÿ“… ๋‚ ์งœ

2025๋…„ 5์›” 7์ผ

๐Ÿ“ ํ•™์Šต ๋‚ด์šฉ

1๏ธโƒฃ JPQL(Java Persistence Query Language) ๊ฐœ๋…

  • JPA์—์„œ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•œ ์ฟผ๋ฆฌ ์–ธ์–ด
  • SQL๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ, ํ…Œ์ด๋ธ”์ด ์•„๋‹Œ ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด(Entity) ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•จ
  • ex) SELECT u FROM User u โ† User๋Š” ์‹ค์ œ ํ…Œ์ด๋ธ”์ด ์•„๋‹ˆ๋ผ ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค ์ด๋ฆ„
  • DB์— ์ข…์†๋˜์ง€ ์•Š๊ณ , JPA ๊ตฌํ˜„์ฒด(Hibernate ๋“ฑ) ๊ฐ€ SQL๋กœ ๋ณ€ํ™˜ํ•ด ์‹คํ–‰

2๏ธโƒฃ UserRepository์—์„œ JPQL ์‚ฌ์šฉ ์˜ˆ์ œ

@Repository
public interface UserRepository extends JpaRepository<User, String> {

    /**
     * ์—ญํ• (role)์— ํ•ด๋‹นํ•˜๋Š” ์‚ฌ์šฉ์ž ๋ชฉ๋ก ์กฐํšŒ
     */
    @Query("SELECT u FROM User AS u WHERE u.role=?1")
    List<User> selectByRole(String role);

    /**
     * ์—ญํ• ๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋ชจ๋‘ ์ผ์น˜ํ•˜๋Š” ์‚ฌ์šฉ์ž ์กฐํšŒ
     * โš ๏ธ ๋ณด์•ˆ์ƒ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ๋น„๊ตํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜!
     */
    @Query("SELECT u FROM User AS u WHERE u.role=?1 and u.password=?2")
    List<User> selectByRoleAndPassword(String role, String password);

    /**
     * ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜๋Š” ์‚ฌ์šฉ์ž ์กฐํšŒ
     * โš ๏ธ ์‹ค์ œ ์„œ๋น„์Šค์—์„œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜
     */
    @Query("SELECT u FROM User AS u WHERE u.password=:password")
    List<User> selectByPassword(@Param("password") String pw);

    /**
     * ์‚ฌ์šฉ์ž ์ด๋ฆ„์— ํŠน์ • ํ‚ค์›Œ๋“œ๊ฐ€ ํฌํ•จ๋œ ์‚ฌ์šฉ์ž ๋ชฉ๋ก ์กฐํšŒ
     * โš ๏ธ LIKE ์‚ฌ์šฉ ์‹œ ์™€์ผ๋“œ์นด๋“œ ์ฒ˜๋ฆฌ ์ฃผ์˜
     */
    @Query("SELECT u FROM User u WHERE u.username LIKE CONCAT('%',:username,'%')")
    List<User> selectAllLikeUsername(@Param("username") String username);
}

3๏ธโƒฃ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์˜ˆ์‹œ

@Test
public void t2() throws Exception {
    // ์‚ฌ์šฉ์ž ์ด๋ฆ„์— '1'์ด ํฌํ•จ๋œ ์‚ฌ์šฉ์ž ๊ฒ€์ƒ‰
    List<User> list = userRepository.selectAllLikeUsername("1");
    list.stream().forEach(System.out::println);
}

๐Ÿ”น ์ถœ๋ ฅ ์˜ˆ์‹œ (๋ฐ์ดํ„ฐ ์˜ˆ์‹œ ๊ธฐ์ค€)

User(username=user1, role=ROLE_USER)
User(username=admin1, role=ROLE_ADMIN)

๐Ÿ”ฅ ์ •๋ฆฌ

  • JPQL์€ ๊ฐ์ฒด(Entity)๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ์ฟผ๋ฆฌ ์–ธ์–ด
  • @Query ๋ฅผ ์‚ฌ์šฉํ•ด ์ปค์Šคํ…€ JPQL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Œ
  • ?1, ?2: ์œ„์น˜ ๊ธฐ๋ฐ˜ ํŒŒ๋ผ๋ฏธํ„ฐ / :param: ๋„ค์ž„๋“œ ํŒŒ๋ผ๋ฏธํ„ฐ
  • LIKE, CONCAT ๋“ฑ์„ ํ†ตํ•ด ๋ถ€๋ถ„ ๊ฒ€์ƒ‰ ๊ตฌํ˜„ ๊ฐ€๋Šฅ
  • ๋ฏผ๊ฐํ•œ ํ•„๋“œ(๋น„๋ฐ€๋ฒˆํ˜ธ ๋“ฑ)๋Š” ์ง์ ‘ ์กฐํšŒ ์ง€์–‘, ์•”ํ˜ธํ™”๋œ ๋น„๊ต ํ•„์š”

๐Ÿ”— ์ฐธ๊ณ  ์ž๋ฃŒ


๋А๋‚€ ์ 

  • JPQL์€ ๊ฐ์ฒด ์ค‘์‹ฌ์˜ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์–ด ์ฝ”๋“œ์™€ DB ๊ฐ„์˜ ์ถ”์ƒํ™”๊ฐ€ ์ž์—ฐ์Šค๋Ÿฌ์›€
  • ๋„ค์ž„๋“œ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๊ฐ€๋…์„ฑ์ด ์ข‹์•„ ์‹ค๋ฌด์— ์ ํ•ฉํ•˜๋‹ค๊ณ  ๋А๋‚Œ
  • ์‹ค์ œ ์„œ๋น„์Šค์—์„œ๋Š” ๋ณด์•ˆ ์ด์Šˆ(๋น„๋ฐ€๋ฒˆํ˜ธ, LIKE ๋“ฑ)์— ๊ฐ๋ณ„ํ•œ ์ฃผ์˜ ํ•„์š”

profile
Here, My Pale Blue.๐ŸŒ

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