Skip to content

Commit

Permalink
11.스프링부트 REST API 개발 Mysql 페이징 처리 - mybatis 사용
Browse files Browse the repository at this point in the history
  • Loading branch information
braverokmc79 committed Jun 26, 2022
1 parent 06cbc19 commit 91982e5
Show file tree
Hide file tree
Showing 15 changed files with 18,174 additions and 42 deletions.
17,541 changes: 17,541 additions & 0 deletions logs/logexample2.log

Large diffs are not rendered by default.

16 changes: 10 additions & 6 deletions src/main/java/kr/so/songjava/configuration/WebMvcConfig.java
@@ -1,20 +1,18 @@
package kr.so.songjava.configuration;

import java.util.List;

import org.springframework.boot.web.servlet.view.MustacheViewResolver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import org.springframework.http.MediaType;

import kr.so.songjava.configuration.handler.BaseHandlerInterceptor;
import kr.so.songjava.mvc.domain.enums.BaseCodeLabelEnum;
import kr.so.songjava.utils.pagination.MySQLPageRequestHandleMethodArgumentResolver;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
Expand Down Expand Up @@ -92,6 +90,12 @@ public void addInterceptors(InterceptorRegistry registry) {
// }


/** 페이징 처리 */
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
// 페이지 리졸버 등록
resolvers.add(new MySQLPageRequestHandleMethodArgumentResolver());
}



Expand Down
16 changes: 16 additions & 0 deletions src/main/java/kr/so/songjava/configuration/http/BaseResponse.java
@@ -1,12 +1,17 @@
package kr.so.songjava.configuration.http;

import kr.so.songjava.utils.pagination2.MysqlPageMaker;
import kr.so.songjava.utils.pagination2.MysqlPageMakerResponse;
import lombok.Data;

@Data
public class BaseResponse<T> {

private BaseResponseCode code;
private String message;
private MysqlPageMakerResponse pageMaker;
private int displayPageNum;

private T data;

public BaseResponse(T data) {
Expand All @@ -26,4 +31,15 @@ public BaseResponse(String status, T data, String message) {
this.data=data;
this.message=message;
}

/** MysqlPageMaker 페이지 처리 메소드 */
public BaseResponse(T data, MysqlPageMaker mysqlPageMaker) {
this.code=BaseResponseCode.SUCCESS;
this.data=data;
this.pageMaker=mysqlPageMaker.toResPageMaker(mysqlPageMaker);
}




}
@@ -1,13 +1,20 @@
package kr.so.songjava.configuration.http;

import lombok.NoArgsConstructor;

@NoArgsConstructor
public enum BaseResponseCode {

SUCCESS(200), // 성공
ERROR(500), // 실패
LOGIN_REQUIRED,
DATA_IS_NULL,
VALIDATE_REQUIRED
;

private int status;


BaseResponseCode(int status) {
this.status = status;
}
Expand Down
87 changes: 77 additions & 10 deletions src/main/java/kr/so/songjava/mvc/controller/BoardApiController.java
Expand Up @@ -22,7 +22,11 @@
import kr.so.songjava.mvc.domain.dto.BoardInsertDTO;
import kr.so.songjava.mvc.domain.dto.BoardSearchParameter;
import kr.so.songjava.mvc.domain.entity.Board;
import kr.so.songjava.mvc.domain.enums.BoardTypeInsert;
import kr.so.songjava.mvc.service.BoardSevice;
import kr.so.songjava.utils.pagination.MySQLPageRequest;
import kr.so.songjava.utils.pagination.PageRequestParameter;
import kr.so.songjava.utils.pagination2.MysqlPageMaker;
import lombok.extern.slf4j.Slf4j;

@RestController
Expand All @@ -35,21 +39,58 @@ public class BoardApiController {
@Autowired
private BoardSevice boardService;

/** 게시판 목록리턴 */
/** 1.게시판 검색처리목록리턴 페이징 처리 x */
@GetMapping({"","/"})
@ApiOperation(value="목록조회", notes="게시물 번호에 해당하는 목록정보를 조회할수 있습니다.")
public BaseResponse<List<BoardDTO>> getList(@ApiParam BoardSearchParameter boardSearchParameter){
@ApiOperation(value="목록조회", notes="1.게시판 검색처리목록리턴 페이징 처리 x")
public BaseResponse<List<BoardDTO>> getList(@ApiParam BoardSearchParameter boardSearchParameter) throws Exception{
return new BaseResponse<List<BoardDTO>>(boardService.getList(boardSearchParameter));
}


/**2.게시판 페이징 검색처리 목록리턴 - 페이징 검색처리 첫번째 방법 (WebMvcConfig 에 페이지 리졸버 등록 방식) */
@GetMapping({"/pageSearchList"})
@ApiOperation(value="목록조회 - WebMvcConfig 에 페이지 리졸버 등록 방식", notes="2.게시판 페이징 검색처리 목록리턴 ")
public BaseResponse<List<BoardDTO>> paginationSearchList(
@ApiParam MySQLPageRequest pageRequest,
@ApiParam BoardSearchParameter parameter
) throws Exception{
log.info("1.pageRequest :" , pageRequest);
PageRequestParameter<BoardSearchParameter> pageRequestParameter=new PageRequestParameter<BoardSearchParameter>(pageRequest, parameter);
log.info("2.pageRequestParameter :" , pageRequestParameter);
return new BaseResponse<List<BoardDTO>>(boardService.paginationSearchList(pageRequestParameter));
}



/** 3. 게시판 페이징 검색처리 목록리턴 - 페이징 검색처리 두번째방법 (전체 갯수 구함) */
@GetMapping({"/pageSearchList2"})
@ApiOperation(value="목록조회 - MysqlPageMaker 사용 ", notes="3.게시판 페이징 검색처리 목록리턴 ")
public BaseResponse<List<BoardDTO>> paginationSearchList2(
@ApiParam MysqlPageMaker pageMaker
) throws Exception{

int totalCount =boardService.getTotalCount(pageMaker);
pageMaker.setTotalCount(totalCount);

log.info("1.pageMaker : {} " , pageMaker);
log.info("2.totalCount : {}" , totalCount);
return new BaseResponse<List<BoardDTO>>(boardService.paginationSearchList2(pageMaker), pageMaker);
}








/** 게시판 상세보기 */
@GetMapping("/{boardSeq}")
@ApiOperation(value="상세조회", notes="게시물 번호에 해당하는 상세정보를 조회할수 있습니다.")
@ApiImplicitParams({
@ApiImplicitParam(name="boardSeq", value="게시물 번호", example = "1")
})
public BaseResponse<Board> get(@PathVariable int boardSeq) {
public BaseResponse<Board> get(@PathVariable int boardSeq) throws Exception {
return new BaseResponse<Board>(boardService.get(boardSeq));
}

Expand All @@ -64,7 +105,7 @@ public BaseResponse<Board> get(@PathVariable int boardSeq) {
@ApiImplicitParam(name="title", value="제목", example = "spring"),
@ApiImplicitParam(name="contents", value="내용", example="spring 강좌"),
})
public BaseResponse<Integer> save(BoardInsertDTO boardInsertDTO) {
public BaseResponse<Integer> save(BoardInsertDTO boardInsertDTO) throws Exception {
boardService.save(boardInsertDTO);
return new BaseResponse<Integer>(boardInsertDTO.getBoardSeq());
}
Expand All @@ -77,23 +118,35 @@ public BaseResponse<Integer> save(BoardInsertDTO boardInsertDTO) {
@ApiImplicitParams({
@ApiImplicitParam(name="boardSeq", value="게시물 번호", example = "1")
})
public BaseResponse<Boolean> delete(@PathVariable int boardSeq) {
public BaseResponse<Boolean> delete(@PathVariable int boardSeq) throws Exception{
return new BaseResponse<Boolean>(boardService.delete(boardSeq));
}


/**대용량 등록 처리1 **/
@ApiOperation(value="대용량 등록처리1" , notes="대용량 등록처리1")
@PutMapping("/saveList1")
public BaseResponse<Boolean> saveList1(){
public BaseResponse<Boolean> saveList1() throws Exception{
int count=0;
//테스트를 위한 랜덤 1000 건의 데이터를 생성
List<BoardInsertDTO> list=new ArrayList<BoardInsertDTO>();
while(true){
count++;
String title=RandomStringUtils.randomAlphabetic(10);
String contents=RandomStringUtils.randomAlphabetic(10);
list.add(BoardInsertDTO.builder().title(title).contents(contents).build());
BoardTypeInsert boardTypeInsert=null;
if(count%4==0) {
boardTypeInsert=BoardTypeInsert.NOTICE;
}if(count%5==0) {
boardTypeInsert=BoardTypeInsert.INQUIRY;
}else {
if(count%2==0) {
boardTypeInsert=BoardTypeInsert.FAQ;
}else {
boardTypeInsert=BoardTypeInsert.NOTICE;
}
}
list.add(BoardInsertDTO.builder().boardType(boardTypeInsert).title(title).contents(contents).build());
if(count >1000) {
break;
}
Expand All @@ -112,15 +165,29 @@ public BaseResponse<Boolean> saveList1(){
/**대용량 등록 처리2 **/
@ApiOperation(value="대용량 등록처리2" , notes="대용량 등록처리2")
@PutMapping("/saveList2")
public BaseResponse<Boolean> saveList2(){
public BaseResponse<Boolean> saveList2() throws Exception{
int count=0;
//테스트를 위한 랜덤 1000 건의 데이터를 생성
List<BoardInsertDTO> list=new ArrayList<BoardInsertDTO>();
while(true){
count++;
String title=RandomStringUtils.randomAlphabetic(10);
String contents=RandomStringUtils.randomAlphabetic(10);
list.add(BoardInsertDTO.builder().title(title).contents(contents).build());

BoardTypeInsert boardTypeInsert=null;
if(count%4==0) {
boardTypeInsert=BoardTypeInsert.NOTICE;
}if(count%5==0) {
boardTypeInsert=BoardTypeInsert.INQUIRY;
}else {
if(count%2==0) {
boardTypeInsert=BoardTypeInsert.FAQ;
}else {
boardTypeInsert=BoardTypeInsert.NOTICE;
}
}

list.add(BoardInsertDTO.builder().boardType(boardTypeInsert).title(title).contents(contents).build());
if(count >1000) {
break;
}
Expand Down
Expand Up @@ -3,10 +3,12 @@
import java.util.List;

import kr.so.songjava.mvc.domain.enums.BoardType;
import kr.so.songjava.mvc.domain.enums.BoardTypeInsert;
import lombok.Data;

@Data
public class BoardSearchParameter {

private String keyword;
private List<BoardType> boardTypes; //배열로 다중 검색 처리를 위해 , NOTICE, FAQ,INQUIRY
private List<BoardTypeInsert> boardTypes; //배열로 다중 검색 처리를 위해 , NOTICE, FAQ,INQUIRY
}
10 changes: 7 additions & 3 deletions src/main/java/kr/so/songjava/mvc/domain/enums/BoardType.java
Expand Up @@ -17,8 +17,12 @@ public enum BoardType {
INQUIRY("INQUIRY" ,"1:1문의")
;

//@JsonValue // 추가
private String code;
/** 한개의 데이터만 가져올경우 @JsonFormat 제거후 해당 변수에 @JsonValue 어노테이션 추가
"boardType": "FAQ", 형태로 반환
*/
//@JsonValue
private String code;
private String label;

}
}

21 changes: 15 additions & 6 deletions src/main/java/kr/so/songjava/mvc/repository/BoardRepository.java
Expand Up @@ -9,22 +9,31 @@
import kr.so.songjava.mvc.domain.dto.BoardInsertDTO;
import kr.so.songjava.mvc.domain.dto.BoardSearchParameter;
import kr.so.songjava.mvc.domain.entity.Board;
import kr.so.songjava.utils.pagination.PageRequestParameter;
import kr.so.songjava.utils.pagination2.MysqlPageMaker;

/** 게시판 Repository */
@Repository
public interface BoardRepository {

public List<BoardDTO> getList(BoardSearchParameter boardSearchParameter);
public List<BoardDTO> getList(BoardSearchParameter boardSearchParameter) throws Exception;

public Board get(int boardSeq);
public Board get(int boardSeq) throws Exception;

public int save(BoardInsertDTO boardInsertDTO);
public int save(BoardInsertDTO boardInsertDTO) throws Exception;

public void saveList(Map<String, Object> paramMap);
public void saveList(Map<String, Object> paramMap) throws Exception;

public int update(BoardInsertDTO boardInsertDTO);
public int update(BoardInsertDTO boardInsertDTO) throws Exception;

public int delete(int boardSeq) throws Exception;

public List<BoardDTO> paginationSearchList(PageRequestParameter<BoardSearchParameter> pageRequestParameter) throws Exception;

public List<BoardDTO> paginationSearchList2(MysqlPageMaker pageMaker) throws Exception;

public int getTotalCount(MysqlPageMaker pageMaker) throws Exception;

public int delete(int boardSeq);



Expand Down

0 comments on commit 91982e5

Please sign in to comment.