Java/Spring

[Spring/JPA] Spring Data JPA๋กœ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜๊ธฐ

๋ฒผ๋ฆฌ01 2024. 3. 12. 21:10

๐Ÿ“Œํ™˜๊ฒฝ

IntelliJ Ultimate

Java 17

 

Spring boot 3.2.3

Gradle - Groovy

Dependencies: 

Spring Web

Thymeleaf

Spring Data JPA

lombok

MariaDB 10.11

Spring Dev tool

 

๐Ÿ“Œ ํ๋ฆ„

CRUD๋Š” ์ด์ œ (๊ฑฐ์ง“๋ง ์กฐ๊ธˆ ๋ณดํƒœ์„œ) ๋ˆˆ ๊ฐ๊ณ ๋„ ํ•˜๋ผ๋ฉด ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ๋Š” ํ•ญ์ƒ ํ•˜๊ธฐ ์‹ซ๋‹ค ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ๋”๋””๊ณ  ์‹ค์ˆ˜๋„ ์žฆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด Spring Data JPA๋Š” ํŽ˜์ด์ง• ๊ธฐ๋Šฅ๋„ ๊ตฌํ˜„ํ•ด๋‘์—ˆ๋‹ค. 

ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ๋Š” `Pageable`ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ๊ตฌ์„ฑํ•ด์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•˜๋ฉด ๋œ๋‹ค. `Pageable`์€ ์ธํ„ฐํŽ˜์ด์Šค๋กœ, ์ผ๋ฐ˜์ ์œผ๋กœ `PageRequest.of()`๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

`PageRequest.of(ํŽ˜์ด์ง€๋ฒˆํ˜ธ, ์‚ฌ์ด์ฆˆ, Sort)` ์ •๋ ฌ ์กฐ๊ฑด์€ ์ƒ๋žต ๊ฐ€๋Šฅ.

๋˜๋Š” `PageRequest.of(ํŽ˜์ด์ง€๋ฒˆํ˜ธ, ์‚ฌ์ด์ฆˆ, Sort.direction, ์†์„ฑ)`

 

๋งค๊ฐœ๋ณ€์ˆ˜๋กœ `Pageable`์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ˜ํ™˜ ํƒ€์ž…์œผ๋กœ `Page<T>`๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Š” ๋ชฉ๋ก๋ฟ ์•„๋‹ˆ๋ผ `count`์ฒ˜๋ฆฌ๋„ ํ•จ๊ป˜ ์‹คํ–‰ํ•ด์ค€๋‹ค. 

 

 

๐Ÿ“Œ ๊ตฌํ˜„

์‚ฌ์‹ค `JpaRepository`๊ฐ€ ๋‹ค ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— `findAll()`์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๊ทธ๋ƒฅ ํŽ˜์ด์ง€๋ฅผ ์–ด๋–ป๊ฒŒ ๋ถˆ๋Ÿฌ์˜ฌ ์ง€ ์„ค์ •๋งŒ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

 

//	import org.springframework.data.domain.Page;
//	import org.springframework.data.domain.PageRequest;
//	import org.springframework.data.domain.Pageable;


    @Test
    public void testPaging(){
        Pageable pageable = PageRequest.of(0, 10, Sort.by("bno").descending());

        Page<Board> result = boardRepository.findAll(pageable);

    }

 

Hibernate: 
    select
        b1_0.bno,
        b1_0.content,
        b1_0.moddate,
        b1_0.regdate,
        b1_0.title,
        b1_0.writer 
    from
        board b1_0 
    order by
        b1_0.bno desc 
    limit
        ?, ?
Hibernate: 
    select
        count(b1_0.bno) 
    from
        board b1_0

 

 

 

JDBC์—์„œ ํŽ˜์ด์ง€ ๋ฐ›์•„์™€์„œ limit ๊ฑธ๊ณ  count ํ•˜๊ณ  prev next ์–ด์ฉŒ๊ณ  ์ €์ฉŒ๊ณ  ์Œ”๋น ์ง€๊ฒŒ ๊ตฌํ˜„ํ–ˆ๋˜ ํŽ˜์ด์ง•์„ ๋‹จ ๋‘ ์ค„๋กœ ํ•ด๊ฒฐํ•ด์ค€๋‹ค. ์‹ฌ์ง€์–ด count๋„ ์•Œ์•„์„œ ๋ถˆ๋Ÿฌ์˜จ๋‹ค. ๊ธฐํŠนํ•ด์„œ ํ•  ๋ง์ด ์—†๋‹ค.

๋ฆฌํ„ด ํƒ€์ž…์ธ `Page<T>`๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ํŽ˜์ด์ง•์— ํ•„์š”ํ•œ ์—ฌ๋Ÿฌ ์ •๋ณด๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ด์ „/๋‹ค์Œ ํŽ˜์ด์ง€๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€, ์ด ๋ช‡ ํŽ˜์ด์ง€์ธ์ง€, ์ „์ฒด ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋Š” ๋ช‡ ๊ฐœ์ธ์ง€๊นŒ์ง€ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

 

2024-03-12T21:08:17.758+09:00  INFO 57142 --- [b02] [    Test worker] o.z.b02.repository.BoardRepositoryTest   : total count: 99
2024-03-12T21:08:17.759+09:00  INFO 57142 --- [b02] [    Test worker] o.z.b02.repository.BoardRepositoryTest   : total pages: 10
2024-03-12T21:08:17.759+09:00  INFO 57142 --- [b02] [    Test worker] o.z.b02.repository.BoardRepositoryTest   : page number: 0
2024-03-12T21:08:17.759+09:00  INFO 57142 --- [b02] [    Test worker] o.z.b02.repository.BoardRepositoryTest   : page size: 10
2024-03-12T21:08:17.760+09:00  INFO 57142 --- [b02] [    Test worker] o.z.b02.repository.BoardRepositoryTest   : board: Board(bno=100, title=update title!!!, content=update content!!!, writer=user0)
2024-03-12T21:08:17.760+09:00  INFO 57142 --- [b02] [    Test worker] o.z.b02.repository.BoardRepositoryTest   : board: Board(bno=99, title=title...99, content=content... 99, writer=user9)
2024-03-12T21:08:17.760+09:00  INFO 57142 --- [b02] [    Test worker] o.z.b02.repository.BoardRepositoryTest   : board: Board(bno=98, title=title...98, content=content... 98, writer=user8)
2024-03-12T21:08:17.761+09:00  INFO 57142 --- [b02] [    Test worker] o.z.b02.repository.BoardRepositoryTest   : board: Board(bno=97, title=title...97, content=content... 97, writer=user7)
2024-03-12T21:08:17.761+09:00  INFO 57142 --- [b02] [    Test worker] o.z.b02.repository.BoardRepositoryTest   : board: Board(bno=96, title=title...96, content=content... 96, writer=user6)
2024-03-12T21:08:17.761+09:00  INFO 57142 --- [b02] [    Test worker] o.z.b02.repository.BoardRepositoryTest   : board: Board(bno=95, title=title...95, content=content... 95, writer=user5)
2024-03-12T21:08:17.761+09:00  INFO 57142 --- [b02] [    Test worker] o.z.b02.repository.BoardRepositoryTest   : board: Board(bno=94, title=title...94, content=content... 94, writer=user4)
2024-03-12T21:08:17.761+09:00  INFO 57142 --- [b02] [    Test worker] o.z.b02.repository.BoardRepositoryTest   : board: Board(bno=93, title=title...93, content=content... 93, writer=user3)
2024-03-12T21:08:17.761+09:00  INFO 57142 --- [b02] [    Test worker] o.z.b02.repository.BoardRepositoryTest   : board: Board(bno=92, title=title...92, content=content... 92, writer=user2)
2024-03-12T21:08:17.761+09:00  INFO 57142 --- [b02] [    Test worker] o.z.b02.repository.BoardRepositoryTest   : board: Board(bno=91, title=title...91, content=content... 91, writer=user1)

 

 

๐Ÿ“ŒSpring Data JPA๋กœ CRUDํ•˜๊ธฐ

[Spring/JPA] Spring Data JPA๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒŒ์‹œํŒ CRUD

 

 

๐Ÿ“Œ์ฐธ๊ณ 

์ž๋ฐ” ์›น ๊ฐœ๋ฐœ ์›Œํฌ๋ถ - ๊ตฌ๋ฉ๊ฐ€๊ฒŒ ์ฝ”๋”ฉ๋‹จ