본문 바로가기

Spring

240229 스프링 프로젝트

어제 아이디, 닉네임, 이메일 체크했던 것 중복 확인해보기

$.ajax({
  url : './valueCheck',
  method : 'post',
  data : { 'mid' : mid.value, 'memail' : memail.value, 'mname' : mname.value},
  dataType : 'json'

 

데이터타입을 json 으로 변환하기

 

기존에 int 형으로 반환했던 값을 Map 으로 바꿔보기

@ResponseBody
@PostMapping("/valueCheck")
public int valueCheck(MemberDTO dto) {
  return loginService.valueCheck(dto);
}

 

Map 으로 바꿔보기

@ResponseBody
@PostMapping("/valueCheck")
public Map<String, Object> valueCheck(MemberDTO dto) {
  int result = loginService.valueCheck(dto);
  Map<String, Object> map = new HashMap<>();
  map.put("count", result);
  return map;
}

postman 으로 실제 실행해본 값

Json 객체로 만들어보기

@ResponseBody
@PostMapping("/valueCheck")
public String valueCheck(MemberDTO dto) {
  int result = loginService.valueCheck(dto);
  JSONObject json = new JSONObject();
  json.put("count", result);
  return json.toString();
}

 

postman 으로 실제 실행해본 값

 

json 에서 왜 toString() 으로 보내야 할까

 

JSON.stringify( )란 무엇인가? — Steemit

JSON.stringify( )는 자바스크립트의 값을 JSON 문자열로 변환한다. JSON이란? JSON은 JavaScript Object Notation의 약자로, 브라우저와 서버사이에서 오고가는 데이터의 형식이다. JSON.stringify(value, replacer, space)

steemit.com

 

기존 Board List 도 json 으로 받아보기

//json 으로 board 받아보기
@GetMapping("/jsonBoard")
@ResponseBody
public String jsonBoardList(@RequestParam(value = "page", required = false) String no, Model model) {
  int currentPageNo = 1;
  if (util.str2Int(no) > 0) { // 여기 수정 필요
    currentPageNo = Integer.valueOf(no);
  }
  int totalRecordCount = boardService.totalRecordCount();
  PaginationInfo paginationInfo = new PaginationInfo();
  paginationInfo.setCurrentPageNo(currentPageNo); // 현재 페이지 번호
  paginationInfo.setRecordCountPerPage(15); // 한 페이지에 게시되는 게시글 건수
  paginationInfo.setPageSize(10); // 페이지 리스트 사이즈
  paginationInfo.setTotalRecordCount(totalRecordCount); // 총 페이지 수

//  model.addAttribute("list", boardService.boardList(paginationInfo.getFirstRecordIndex()));
//  model.addAttribute("paginationInfo", paginationInfo);
    
  JSONObject json = new JSONObject();
  json.put("list", boardService.boardList(paginationInfo.getFirstRecordIndex()));
  json.put("page", currentPageNo);
  json.put("paginationInfo", paginationInfo);
  return json.toString();
}

 

결과 값

 

검색 기능 추가해보기

검색 창 추가, 페이지는 필요 없긴 한데,, 일단 선생님꺼 따라가기

<div>
  <div class="my-2">
    <form action="./board">
      <input type="text" name="search"/>
      <input type="hidden" name="page" value="${param.page }"/>
      <button type="submit" class="btn btn-dark">검색</button>
    </form>
  </div>
</div>

 

검색이 들어가면 search 와 page 받기

// 페이징 추가하기
@GetMapping("/board")
public String boardList(
                @RequestParam(value = "page", required = false, defaultValue = "1") String no,
                @RequestParam(value = "search", required = false) String search,
                Model model) {
    
  // page 가 안오면
  int currentPageNo = 1;
  if (util.str2Int(no) > 0) { // 여기 수정 필요
    currentPageNo = Integer.valueOf(no);
  }

  int totalRecordCount = boardService.totalRecordCount(search);

  PaginationInfo paginationInfo = new PaginationInfo();
  paginationInfo.setCurrentPageNo(currentPageNo); // 현재 페이지 번호
  paginationInfo.setRecordCountPerPage(15); // 한 페이지에 게시되는 게시글 건수
  paginationInfo.setPageSize(10); // 페이지 리스트 사이즈
  paginationInfo.setTotalRecordCount(totalRecordCount); // 총 페이지 수
    
  SearchDTO searchDTO = new SearchDTO();
  searchDTO.setPage(paginationInfo.getFirstRecordIndex());
  searchDTO.setSearch(search);

  model.addAttribute("list", boardService.boardList(searchDTO));
  model.addAttribute("paginationInfo", paginationInfo);
  model.addAttribute("page", currentPageNo);
  model.addAttribute("search", search);
  return "board";
}

 

검색어를 활용하여 총 게시글 수도 체크하고, 검색 시 제목, 내용, 작성자 모두 파악할 수 있도록 함

<select id="totalRecordCount" resultType="Integer" parameterType="String">
  select count(*) from board b join member m 
  on b.mno = m.mno where board_del='1'
  <if test="search != null">
    and (board_title like concat('%',#{search},'%') 
    or board_content like concat('%',#{search},'%')
    or m.mname like concat('%', #{search}, '%'))
  </if>
</select>

<select id="boardList" parameterType="searchDTO" resultType="boardDTO">
  select b.board_no AS board_no, b.board_title AS board_title, m.mname AS mname,
  if(date_format(current_timestamp(),'%Y-%m-%d') = date_format(b.board_date,'%Y-%m-%d'),
  date_format(b.board_date,'%h:%i'), date_format(b.board_date,'%m-%d')) AS board_date,
  (select count(0) from visitcount where visitcount.board_no = b.board_no) AS board_count,
  (select count(0) from comment where comment.board_no = b.board_no and comment.cdel = '1') AS comment 
  from (board b join member m on(b.mno = m.mno))
  where b.board_del = '1' 
  <if test="search != null">
    and (b.board_title like concat('%', #{search}, '%') 
    or b.board_content like concat('%', #{search}, '%')
    or m.mname like concat('%', #{search}, '%'))
  </if>
  order by b.board_no desc 
  limit #{page}, 15
</select>

 

if 안의 조건들은 괄호로 감싸야만 한꺼번에 처리 후 계산이 됨

괄호 안넣으면 오류는 안나지만 결과에 잘못된 내용이 들어감

 

'Spring' 카테고리의 다른 글

240305 스프링 프로젝트  (4) 2024.03.05
240304 스프링 프로젝트  (3) 2024.03.04
240228 스프링 프로젝트  (2) 2024.02.28
240227 스프링 프로젝트  (1) 2024.02.27
240226 스프링 프로젝트  (2) 2024.02.26