2025๋ 5์ 7์ผ
Spring Data JPA์์๋ ๋ฉ์๋ ์ด๋ฆ๋ง์ผ๋ก๋ SQL ์์ด ์๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์ ์๋ค.
findBy
, countBy
, deleteBy
๋ฑ์ prefix์ ์์ฑ๋ช
์ ์กฐํฉํ์ฌ ๋ค์ํ ๊ฒ์ยท์กฐ์ ๊ธฐ๋ฅ์ ๋ง๋ค ์ ์๋ค.
@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);
}
@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)
findBy
, countBy
, deleteBy
๊ฐ์ ํค์๋๋ฅผ ์์์ผ๋ก ๋ค์ํ ์กฐํฉ ๊ฒ์ ๊ฐ๋ฅAnd
, Or
), ํค์๋ ๊ฒ์(Contains
, StartingWith
), ๋ฒ์ ๊ฒ์(Between
), ์ ๋ ฌ(OrderBy
) ๋ฑ ํญ๋์ ๊ธฐ๋ฅ ์ง์JPA์ ๋ฉ์๋ ๋ค์ด๋ฐ ๊ท์น์ ๋จ์ํ๋ฉด์๋ ๊ฐ๋ ฅํ๋ค.
ํนํ ๋์๋ช ํค์๋ ๊ฒ์, ๋ณตํฉ ์กฐ๊ฑด ์กฐํ, ์๋ ์ ๋ ฌ ๋ฑ์ ๊ด๋ฆฌ์ ํ์ด์ง๋ ๊ฒ์ ๊ธฐ๋ฅ์ด ์์ฃผ ํ์ํ ์ค๋ฌด์์ ๋งค์ฐ ์ ์ฉํ ๊ฒ์ผ๋ก ํ๋จ๋๋ค.
์๋ฅผ ๋ค์ด, "์ฑ ์ ๋ชฉ์ ํน์ ๋จ์ด๊ฐ ํฌํจ๋ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ ฌํด ๋ณด์ฌ์ฃผ๋ ๊ฒ์ ๊ธฐ๋ฅ"์ SQL ์์ด๋ ๊ตฌํํ ์ ์๋ค๋ ์ ์ด ๋งค์ฐ ์ธ์ ๊น์๋ค.
์ด๋ฌํ ๋ฐฉ์์ ์ฝ๋ ๊ฐ๋ ์ฑ๊ณผ ์์ฐ์ฑ์ ๋์์ ํฅ์์์ผ์ฃผ๊ธฐ ๋๋ฌธ์, ์ถํ ๊ธฐ์ ์ฉ ์น ์๋น์ค๋ CMS ๊ตฌํ ์ ์ ๊ทน ํ์ฉํ ๊ณํ์ด๋ค.