스프링 부트 ( Spring boot ) 카테고리 목록 API 만들어 보기
이번 글에서는 이전 작업내용을 활용하여 간단한 카테고리 목록을 정보를 뿌려주는 API 만들어 보려고 합니다.
이번에는 postgresql 데이터베이스를 사용하였습니다.
전체 범위의 카테고리안에 세부 카테고리가 있는 형식으로 구성하려고 합니다.
아래는 생성한 테이블 목록입니다.
카테고리 테이블과 카테고리아이템 테이블 입니다.
카테고리아이템 테이블의 categoryid는 카테고리 테이블의 id를 참조합니다.
프로젝트를 시작하기 전에 하나의 플러그인(Plugin)을 설치하려고 합니다.
바로 Lombok 플러그인 입니다.
맥북이라면 command 키와 , 키를 동시에 눌러줍니다.
윈도우라면 설정란에 있습니다.
이후 플러그인을 설치하고 재부팅을 하시면 완료입니다.
그 외에도 이클립스를 사용중이시라면 아래의 글을 참고하세요
2018/09/27 - [IT/프로그래밍] - [Lombok/롬복] lombok 사용법 설치하기 및 적용하기 및 예제
메이븐에서 lombok 과 postgresql 아래와 같이 설정해 줍니다.
<!-- postgresql -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.5</version>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
<scope>provided</scope>
</dependency>
이전 글까지 잘 따라하셨다면 구조는 아래와 같은 것 입니다.
변경된 구조는 아래와 같습니다.
domain 폴더를 dto 폴더로 변경하였습니다.
그리고 service 폴더를 추가하였습니다.
Dto 클래스는 아래와 같습니다.
import lombok.Data;
import java.util.List;
@Data
public class CategoryDto {
private int id;
private String name;
private List<CategoryItemDto> categories;
}
import lombok.Data;
@Data
public class CategoryItemDto {
private int id;
private String name;
private int categoryid;
}
DB의 테이블 구조와 같습니다.
kingmapper.xml
<select id="getCategoryList" resultType="com.kingname.tistory.king.dto.CategoryDto">
select *
from category;
</select>
<select id="getCategoryItemList" resultType="com.kingname.tistory.king.dto.CategoryItemDto">
select *
from categoryitem;
</select>
단순 select 입니다.
아래는 dao 클래스 입니다.
import com.kingname.tistory.king.dto.CategoryDto;
import com.kingname.tistory.king.dto.CategoryItemDto;
import java.util.List;
public interface CategoryDao {
public List<CategoryDto> getCategoryList() throws Exception;
public List<CategoryItemDto> getCategoryItemList() throws Exception;
}
Mapper.xml id와 동일하게 설정하였습니다.
아래는 MainController 클래스 입니다.
import com.kingname.tistory.king.dto.CategoryDto;
import com.kingname.tistory.king.service.CategoryService;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@AllArgsConstructor
public class MainController {
private CategoryService categoryService;
@RequestMapping(value = "/category/all", method = RequestMethod.GET)
public List<CategoryDto> getCategoryAll(){
return categoryService.getCategoryList();
}
}
저번에는 @Autowired 어노테이션을 사용하였지만 lombok을 설치하여 @AllArgsConstructor 어노테이션을 사용할 수 있게 되었습니다.
@Autowired 어노테이션보다 추천하는 방법입니다.
아래는 Service 클랙스 입니다.
import com.kingname.tistory.king.dao.CategoryDao;
import com.kingname.tistory.king.dto.CategoryDto;
import com.kingname.tistory.king.dto.CategoryItemDto;
import lombok.AllArgsConstructor;
import org.apache.catalina.connector.Response;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
@AllArgsConstructor
public class CategoryService {
private CategoryDao categoryDao;
public List<CategoryDto> getCategoryList(){
try {
List<CategoryDto> categoryList = categoryDao.getCategoryList();
List<CategoryItemDto> categoryItemDomainList = categoryDao.getCategoryItemList();
for (CategoryDto category : categoryList) {
List<CategoryItemDto> categoryTemp = new ArrayList<>();
for (CategoryItemDto item : categoryItemDomainList) {
if (category.getId() == item.getCategoryid()) {
categoryTemp.add(item);
}
}
category.setCategories(categoryTemp);
}
return categoryList;
}catch (Exception e) {
e.printStackTrace();
}
return null;
}}
@Service 어노테이션을 사용하였습니다. 마찬가지로 @AllArgsConstructor 어노테이션을 사용하였습니다.
category 테이블 전체 데이터와 categoryitem 테이블 전체 데이터를 불러와 category 테이블의 id 컬럼과 categoryitem의 categoryid와 동일할 경우 categoryitem을 category의 categories로 넣어주어 리턴합니다.
결과는 아래와 같습니다.
이상으로 스프링 부트 ( Spring boot ) 카테고리 목록 API 만들어 보기 포스팅을 마치겠습니다.
궁금하신점이나 이상이 있으신 점이 있으시다면 댓글을 통해서 알려주시면 감사하겠습니다.
도움이 되셨다면 공감과 +a 꾹!