๐Ÿ“Œ JPA ํ•จ์ˆ˜๋ช… ๋ช…๋ช…๊ทœ์น™ ์‹ค์Šต

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

SPRING BOOT

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

๐Ÿ“… ๋‚ ์งœ

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

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

1๏ธโƒฃ ์ฃผ์š” ๊ฐœ๋…: JPA Repository ๋ฉ”์„œ๋“œ ์ด๋ฆ„ ๊ทœ์น™

โœ… ๊ฐœ๋… ์š”์•ฝ

Spring Data JPA์—์„œ๋Š” ๋ฉ”์„œ๋“œ ์ด๋ฆ„๋งŒ์œผ๋กœ๋„ SQL ์—†์ด ์ž๋™ ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

findBy, countBy, deleteBy ๋“ฑ์˜ prefix์™€ ์†์„ฑ๋ช…์„ ์กฐํ•ฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๊ฒ€์ƒ‰ยท์กฐ์ž‘ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.


โœ… BookRepository.java

@Repository
public interface BookRepository extends JpaRepository<Book, Long> {

    // ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋Š” ์กฐ๊ฑด ๊ฒ€์ƒ‰
    List<Book> findByBookName(String bookName);
    List<Book> findByPublisher(String publisher);
    List<Book> findByIsbn(String isbn);

    // ๋ณตํ•ฉ ์กฐ๊ฑด ๊ฒ€์ƒ‰
    Book findByBookNameAndIsbn(String bookName, String isbn);

    // ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰
    List<Book> findByBookNameContains(String keyword);

    // ๊ฐœ์ˆ˜ ์กฐํšŒ
    int countByBookName(String bookName);
    int countByBookNameContains(String bookName);

    // ์‚ญ์ œ
    void deleteByBookName(String bookName);

    // ๋ช…๋ช… ๊ทœ์น™ ์ฐธ๊ณ ์šฉ (์ฃผ์„)
//    List<Book> findByBookcodeBetween(long start, long end);
//    List<Book> findByBooknameOrPublisher(String bookname, String publisher);
//    List<Book> findByBooknameOrPublisherOrderByBooknameAsc(String bookname, String publisher);
//    List<Book> findByPublisherStartingWith(String prefix);
//    int countByPublisher(String publisher);
//    void deleteByBookname(String bookname);
}

โœ… ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ: t2() - JPA ๋„ค์ด๋ฐ ๊ทœ์น™๋ณ„ ์กฐํšŒ ํ…Œ์ŠคํŠธ

@Test
public void t2() throws Exception {

    // ID๋กœ ์กฐํšŒ ํ…Œ์ŠคํŠธ
//    Optional<Book> bookOptional = bookRepository.findById(1111L);
//    if (bookOptional.isPresent())
//        System.out.println(bookOptional.get());

    // ๋„์„œ๋ช…์œผ๋กœ ๊ฒ€์ƒ‰
//    List<Book> list = bookRepository.findByBookName("์ด๊ฒƒ์ด๋ฆฌ๋ˆ…์Šค๋‹ค");
//    list.stream().forEach(System.out::println);

    // ์ถœํŒ์‚ฌ๋กœ ๊ฒ€์ƒ‰
//    List<Book> list = bookRepository.findByPublisher("ํ•œ๋น›๋ฏธ๋””์–ด");
//    list.stream().forEach(System.out::println);

    // ๋„์„œ๋ช… + ISBN ๋ณตํ•ฉ ์กฐ๊ฑด ๊ฒ€์ƒ‰
//    Book book = bookRepository.findByBookNameAndIsbn("C์–ธ์–ด ๊ธฐ๋ณธ", "3333");
//    System.out.println(book);

    // ๋„์„œ๋ช…์— "์ด๊ฒƒ"์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๊ฐ€ ํฌํ•จ๋œ ๋„์„œ ๊ฒ€์ƒ‰
    List<Book> list = bookRepository.findByBookNameContains("์ด๊ฒƒ");
    list.stream().forEach(System.out::println);
}

๐Ÿ”น ์ถœ๋ ฅ ๊ฒฐ๊ณผ (๋„์„œ๋ช…์— '์ด๊ฒƒ'์ด ํฌํ•จ๋œ ๋„์„œ ๋ชฉ๋ก)

Book(bookCode=1111, bookName=์ด๊ฒƒ์ด๋ฆฌ๋ˆ…์Šค๋‹ค, publisher=ํ•œ๋น›๋ฏธ๋””์–ด, isbn=1111)
Book(bookCode=4444, bookName=์ด๊ฒƒ์ด๋ฆฌ๋ˆ…์Šค๋‹ค, publisher=ํ•œ๋น›๋ฏธ๋””์–ด, isbn=4444)

๐Ÿ”ฅ ์ •๋ฆฌ

  • JPA๋Š” ๋ฉ”์„œ๋“œ ์ด๋ฆ„๋งŒ์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฟผ๋ฆฌ๋ฌธ์„ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
  • findBy, countBy, deleteBy ๊ฐ™์€ ํ‚ค์›Œ๋“œ๋ฅผ ์‹œ์ž‘์œผ๋กœ ๋‹ค์–‘ํ•œ ์กฐํ•ฉ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ
  • ์กฐ๊ฑด ์กฐํ•ฉ(And, Or), ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰(Contains, StartingWith), ๋ฒ”์œ„ ๊ฒ€์ƒ‰(Between), ์ •๋ ฌ(OrderBy) ๋“ฑ ํญ๋„“์€ ๊ธฐ๋Šฅ ์ง€์›
  • ์ฝ”๋“œ์˜ ๊ฐ„๊ฒฐ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ ํ–ฅ์ƒ์— ๋งค์šฐ ํšจ๊ณผ์ 

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


๋А๋‚€ ์ 

JPA์˜ ๋ฉ”์„œ๋“œ ๋„ค์ด๋ฐ ๊ทœ์น™์€ ๋‹จ์ˆœํ•˜๋ฉด์„œ๋„ ๊ฐ•๋ ฅํ–ˆ๋‹ค.

ํŠนํžˆ ๋„์„œ๋ช… ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰, ๋ณตํ•ฉ ์กฐ๊ฑด ์กฐํšŒ, ์ž๋™ ์ •๋ ฌ ๋“ฑ์€ ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€๋‚˜ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์ด ์ž์ฃผ ํ•„์š”ํ•œ ์‹ค๋ฌด์—์„œ ๋งค์šฐ ์œ ์šฉํ•  ๊ฒƒ์œผ๋กœ ํŒ๋‹จ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, "์ฑ… ์ œ๋ชฉ์— ํŠน์ • ๋‹จ์–ด๊ฐ€ ํฌํ•จ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ •๋ ฌํ•ด ๋ณด์—ฌ์ฃผ๋Š” ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ"์„ SQL ์—†์ด๋„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ๋งค์šฐ ์ธ์ƒ ๊นŠ์—ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ๊ณผ ์ƒ์‚ฐ์„ฑ์„ ๋™์‹œ์— ํ–ฅ์ƒ์‹œ์ผœ์ฃผ๊ธฐ ๋•Œ๋ฌธ์—, ์ถ”ํ›„ ๊ธฐ์—…์šฉ ์›น ์„œ๋น„์Šค๋‚˜ CMS ๊ตฌํ˜„ ์‹œ ์ ๊ทน ํ™œ์šฉํ•  ๊ณ„ํš์ด๋‹ค.


profile
Here, My Pale Blue.๐ŸŒ

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