본문 바로가기

SPRING

[Spring Boot] @Service 레이어로 분리해주기

원래 하나의 클래스에는 비슷한 기능의 함수들만 보관하는게 관습임

물론 보관상이나 찾기에도 쉬움

 

 

 

    @PostMapping("/add")
    String addPost(
    @RequestParam(name ="title") String title,
                   @RequestParam(name ="price") int price){


        System.out.println(title);
        System.out.println(price);

       Item addItem = new Item(title,price);
		itemRepository.save(addItem);
        
        return "redirect:/list";

여기에보면 DB입출력기능 html 보내주는기능이 섞여있음 

이렇게 섞여있으면 안좋음

그래서 따로 자바클래스를 만들어서 빼줘야함 

 

Service

검사하거나 DB입출력하는것을 비즈니스 로직이라고 부름

그 비즈니스로직을 담는 클래스를 Service라고 부름

 

ItemService 자바파일을 만들어주고

DB입출력기능인 코드들을 가져와주기 

@Service 붙여주기 (@Repository,@Component 써도됨)

@Service
@RequiredArgsConstructor
public class ItemService {

    private final ItemRepository itemRepository;
    public void saveItem(String title,Integer price){
       
        System.out.println(title);
        System.out.println(price);

        Item addItem = new Item(title,price);

        itemRepository.save(addItem);
    }
}

 

 

파라미터를 받아와야 쓸수있기때문에 파라미터도 등록해줌

 

public void saveItem(String title,Integer price){

 

itemRepository도 받아와야하기때문에 등록해주기

어떻게? JPA 3step!기억하자!

https://k-kk.tistory.com/72

 

[Spring Boot] JPA로 DB데이터 입출력하기

JPA 사용방법 3step 1. repository 만들기 1-1 자바폴더에다가 테이블명Repository interface 파일 만듬1-2 extends JpaRepositoryimport org.springframework.data.jpa.repository.JpaRepository;public interface ItemRepository extends JpaRepos

k-kk.tistory.com

 

근데! 

근데! 이미 파일은 만들어져있으니까 

private final ItemRepository itemRepository; 등록

 

@RequiredArgsConstructor 이거 붙여주면 됨

 

그럼 써보자~!

근데 다른 클래스의 함수를 사용하려면 

 

Age object = new Age(); 이런식으로 new 해서 뽑아쓰는거라고 생각하는데

원래는 다른 class의 함수를 사용할때는 new class(). 이런식으로 쓰면 비효율적임 

요청이 100만개 들어오면 100만개 이렇게 써야함 

다른데서 미리 new 해놓고 재사용하는게 좋음 관습임.

 

3step

1.서비스클래스에 @Service 붙이기

2. 함수를 쓰고싶은 곳에가서 변수등록(@RequiredArgsConstructor 이것도 있어야함 )

3. 원하는곳에서 변수.함수() 쓰면됨 

 

@RequiredArgsConstructor
@Controller
public class ItemController {

   private final ItemRepository itemRepository;
   private final ItemService itemService;
@PostMapping("/add")
    String addPost(@RequestParam(name ="title") String title,
                   @RequestParam(name ="price") int price){


    itemService.saveItem(title,price);

        return "redirect:/list";

    }