Spring/๐Ÿ”ฅ[spring]์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ ์›น ํ”„๋กœ์ ํŠธ_๊ตฌ๋ฉ๊ฐ€๊ฒŒ ์ฝ”๋”ฉ๋‹จ

4.3.2 ์—”ํ‹ฐํ‹ฐ์˜ ํ…Œ์ŠคํŠธ

1son 2023. 2. 17. 12:29

์ด๋ฒˆ ์žฅ์˜ ์˜ˆ์ œ์—์„œ๋Š” Querydsl ์œ„์ฃผ์˜ ์˜ˆ์ œ๋กœ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ ์ „์— ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. 

 

GuestbookRepositoryTests์—๋Š” 300๊ฐœ์˜ ํ…Œ์ŠคํŠธ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ๋„ฃ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. 

 

package org.zerock.guestbook.repository;


import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.zerock.guestbook.entity.Guestbook;

import java.util.stream.IntStream;

@SpringBootTest
public class GuestbookRepositoryTests {
    
    @Autowired
    private GuestbookRepository guestbookRepository;
    
    @Test
    public void insertDummies(){
        IntStream.rangeClosed(1,300).forEach(i ->{
            Guestbook guestbook = Guestbook.builder()
                    .title("Title...."+i)
                    .content("Content..."+i)
                    .writer("user"+(i%10))
                    .build();
            System.out.println(guestbookRepository.save(guestbook));
        });
    }
    
}

์œ„์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์— 300๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. 

 

์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ์˜ regdate(์ƒ์„ฑ์‹œ๊ฐ„), moddate(์ˆ˜์ •์‹œ๊ฐ„)์ด ์ž๋™์œผ๋กœ

null์ด ์•„๋‹Œ ๊ฐ’์œผ๋กœ ์ฑ„์›Œ์ง€๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

 

 

์ˆ˜์ •์‹œ๊ฐ„ ํ…Œ์ŠคํŠธ

 

์—”ํ‹ฐํ‹ฐํด๋ž˜์Šค์—์„œ ํ•„์š”์— ๋”ฐ๋ผ์„œ ์ˆ˜์ • ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. 

์˜ˆ์ œ์—์„œ๋Š” ์ œ๋ชฉ๊ณผ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก changeTitle(), changeContent()์™€ ๊ฐ™์€

๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋„๋ก Guestbook ํด๋ž˜์Šค๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. 

 

public class Guestbook extends BaseEntity{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long gno;

    @Column(length = 100, nullable = false)
    private String title;

    @Column(length = 1500, nullable = false)
    private String content;

    @Column(length = 50, nullable = false)
    private String writer;

    public void changeTitle(String title){
        this.title = title;
    }
    
    public void changeContent(String content){
        this.content= content;
    }

}

BaseEntity์˜ modDate๋Š” ์ตœ์ข… ์ˆ˜์ • ์‹œ๊ฐ„์ด ๋ฐ˜์˜๋˜๊ธฐ ๋•Œ๋ฌธ์—

ํŠน์ •ํ•œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ˆ˜์ •ํ•œ ํ›„์— save()ํ–ˆ์„ ๊ฒฝ์šฐ์— ๋™์ž‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

 

์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ์ง€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. 

 

@Test
    public void updateTest(){
        Optional<Guestbook> result = guestbookRepository.findById(300L);
        //์กด์žฌํ•˜๋Š” ๋ฒˆํ˜ธ๋กœ ํ…Œ์ŠคํŠธ 
        
        if(result.isPresent()){
            Guestbook guestbook = result.get();
            
            guestbook.changeTitle("Changed Title....");
            guestbook.changeContent("Changed Content....");
            
            guestbookRepository.save(guestbook);
        }
    }

์œ„์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด 300๋ฒˆ์˜ moddate์™€ regdate๊ฐ€ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

 

 

4.3.3 Querydsl ํ…Œ์ŠคํŠธ 

 

๋ณธ๊ฒฉ์ ์œผ๋กœ Querydsl์˜ ์‹ค์Šต์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. 

 

- '์ œ๋ชฉ/๋‚ด์šฉ/์ž‘์„ฑ์ž'์™€ ๊ฐ™์ด ๋‹จ ํ•˜๋‚˜์˜ ํ•ญ๋ชฉ์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒฝ์šฐ 

- '์ œ๋ชฉ+๋‚ด์šฉ'/'๋‚ด์šฉ+์ž‘์„ฑ์ž'/'์ œ๋ชฉ+์ž‘์„ฑ์ž'์™€ ๊ฐ™์ด 2๊ฐœ์˜ ํ•ญ๋ชฉ์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒฝ์šฐ 

- ์ œ๋ชฉ + ๋‚ด์šฉ + ์ž‘์„ฑ์ž์™€ ๊ฐ™์ด 3๊ฐœ์˜ ํ•ญ๋ชฉ์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒฝ์šฐ 

 

๋งŒ์ผ ๋” ๋งŽ์€ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋“ค์ด ์„ ์–ธ๋˜์–ด ์žˆ์—ˆ๋‹ค๋ฉด ์ด๋Ÿฌํ•œ ์กฐํ•ฉ์˜ ์ˆ˜๋Š” ์—„์ฒญ ๋งŽ์•„์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

์ด๋Ÿฐ ์ƒํ™ฉ์„ ๋Œ€๋น„ํ•ด์„œ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” Querysdl์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. 

 

Querydsl์˜ ์‚ฌ์šฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. 

 

- BooleanBuilder๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. 

- ์กฐ๊ฑด์— ๋งž๋Š” ๊ตฌ๋ฌธ์€ Querydsl์—์„œ ์‚ฌ์šฉํ•˜๋Š” Predicate ํƒ€์ž…์˜ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. 

- BooleanBuilder์— ์ž‘์„ฑ๋œ Predicate๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. 

 

 

๋‹จ์ผํ•ญ๋ชฉ ๊ฒ€์ƒ‰ ํ…Œ์ŠคํŠธ