menu.jsp
<!-- Nav Item - Pages Collapse Menu --> 아래
./board
./comment 수정
<h6 class="collapse-header">게시판 관리:</h6>
<a class="collapse-item" href="./board">게시글 관리</a>
<a class="collapse-item" href="./comment">댓글관리</a>
> .을 붙이면 그냥 board로 가던가 admin/board로 가게된다.
AdminService, AadminServiceImlp 만들기
AdminService(interface)
package org.mask.service;
public interface AdminService {
}
AadminServiceImlp
> @Service("adminService") 추가
> @Autowired private AdminDAO adminDAO; 추가
package org.mask.service;
import org.mask.dao.AbstractDAO;
import org.mask.dao.AdminDAO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service("adminService")
public class AdminServiceImpl extends AbstractDAO implements AdminService {
@Autowired
private AdminDAO adminDAO;
}
AdminController > @Resource(name = "adminService") 추가
@Resource(name = "adminService")
private AdminServiceImpl adminService;
AdminController >board 만들기
@GetMapping("/board")
public String board(Model model) {
List<BoardDTO> list = adminService.boardList();
model.addAttribute("list", list);
return "admin/board";
}
>service에 boardList 만들기
AdminServiceImpl > boardList 만들기
public List<BoardDTO> boardList() {
return adminDAO.boardList();
}
>DAO에 boardList 만들기
AdminDAO>boardList
public List<BoardDTO> boardList() {
return sqlSession.selectList("admin.boardList");
}
admin-mapper > boardList
<mapper namespace="admin">
<select id="boardList" resultType="boardDTO">
SELECT board_no, board_title, mno, board_date, board_ip, board_del
FROM board
</select>
</mapper>
board.jsp > ${list } 추가
<!-- Page Heading -->
<h1 class="h3 mb-4 text-gray-800">Blank Page</h1>
${list }
boardDTO >board_del 추가
@Data
public class BoardDTO {
private int board_no, board_count, comment ;
private String board_title, board_content, mname, mid, board_date, board_ip, board_del;
board.jsp > <!-- Page Heading --> 아래 테이블 추가
<!-- Page Heading -->
<h1 class="h3 mb-4 text-gray-800">Blank Page</h1>
<div class="row text-center">
<table class="table table-hover">
<thead>
<tr>
<th>번호</th>
<th>제목</th>
<th>글쓴이</th>
<th>날짜</th>
<th>읽음</th>
<th>삭제여부</th>
</tr>
</thead>
<tbody>
<c:forEach items="${list }" var="row">
<tr>
<td>${row.board_no }</td>
<td>${row.board_title }</td>
<td>${row.mname }</td>
<td>${row.board_date }</td>
<td>${row.board_count }</td>
<td>${row.board_del }</td>
</tr>
</c:forEach>
</tbody>
</table>
페이징 + 검색 + 한 화면에 보이는 게시글 수 변경
admin-mapper > limit 추가
<mapper namespace="admin">
<select id="boardList" resultType="boardDTO">
SELECT board_no, board_title, mno, board_date, board_ip, board_del
FROM board
LIMIT 0,10;
</select>
</mapper>
AdminController
> @RequestParam("pageNo") String pageNo 추가
> totalRecordCount (전체 글 수 뽑기)
@GetMapping("/board")
public String board(@RequestParam("pageNo") String pageNo, Model model) {
// 페이징 + 검색 + 한 화면에 보이는 게시글 수 변경
// 전체 글 수 뽑기
int totalRecordCount = adminService.totalRecordCount(searchDTO);
List<BoardDTO> list = adminService.boardList();
model.addAttribute("list", list);
return "admin/board";
}
AdminService > totalRecordCount(전체 글 수 뽑기)
@Override
public int totalRecordCount() {
return adminDAO.totalRecordCount();
}
AdminDAO> totalRecordCount(전체 글 수 뽑기) > 실행시키면 INT값나온다
public int totalRecordCount() {
return sqlSession.selectOne("admin.totalRecordCount")
}
admin-mapper
<select id="totalRecordCount" resultType="Integer">
SELECT COUNT(*) FROM board
</select>
AdminController> Util 불러서 오류 수정
@Autowired
private Util util;
AdminController> 전자정부 페이징(pagination) 부분 추가
@GetMapping("/board")
public String board(@RequestParam("pageNo") String pageNo, Model model) {
// 전체 글 수 뽑기
int totalRecordCount = adminService.totalRecordCount(searchDTO);
// 전자정부 페이징 pagination
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(util.str2Int(pageNo)); // 현재 페이지 번호
paginationInfo.setRecordCountPerPage(10); // 한 페이지에 게시되는 게시물 건수
paginationInfo.setPageSize(10); // 페이징 리스트의 사이즈
paginationInfo.setTotalRecordCount(totalRecordCount); // 전체 게시물 건 수
List<BoardDTO> list = adminService.boardList();
model.addAttribute("list", list);
return "admin/board";
}
>검색기능 추가
SearchDTO searchDTO = new SearchDTO;
searchDTO.setPageNo(paginationInfo.getFirstRecordIndex());
List<BoardDTO> list = adminService.boardList(searchDTO);
@GetMapping("/board")
public String board(@RequestParam("pageNo") String pageNo, Model model) {
// 페이징 + 검색 + 한 화면에 보이는 게시글 수 변경
// 전체 글 수에도 DTO 보내기
SearchDTO searchDTO = new SearchDTO();
// 전체 글 수 뽑기
int totalRecordCount = adminService.totalRecordCount(searchDTO);
// 전자정부 페이징 pagination
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(util.str2Int(pageNo)); // 현재 페이지 번호
paginationInfo.setRecordCountPerPage(10); // 한 페이지에 게시되는 게시물 건수
paginationInfo.setPageSize(10); // 페이징 리스트의 사이즈
paginationInfo.setTotalRecordCount(totalRecordCount); // 전체 게시물 건 수
// 검색에서 사용할 값 추가
searchDTO.setPageNo(paginationInfo.getFirstRecordIndex());
List<BoardDTO> list = adminService.boardList(searchDTO);
model.addAttribute("list", list);
return "admin/board";
}
AdminServiceImpl > searchDTO 추가
@Override
public List<BoardDTO> boardList(SearchDTO searchDTO) {
return adminDAO.boardList(searchDTO);
}
AdminService > searchDTO 추가
List<BoardDTO> boardList(SearchDTO searchDTO);
AdminDAO > searchDTO 추가
public List<BoardDTO> boardList(SearchDTO searchDTO) {
return sqlSession.selectList("admin.boardList",searchDTO);
}
mybatis-config.xml > search 를 searchDTO 로 변경
<typeAlias type="org.mask.dto.SearchDTO" alias="SearchDTO"/>
admin-mapper.xml
<mapper namespace="admin">
<select id="boardList" resultType="searchDTO" resultType="boardDTO">
SELECT board_no, board_title, mno, board_date, board_ip, board_del
FROM board
LIMIT 0,10;
</select>
</mapper>
AdminController
>@RequestParam(name = "pageNo", defaultValue = "1") 추가
>model.addAttribute("paginationInfo", paginationInfo); 추가
@GetMapping("/board")
public String board(@RequestParam(name = "pageNo", defaultValue = "1")
String pageNo, Model model) {
....
List<BoardDTO> list = adminService.boardList(searchDTO);
model.addAttribute("list", list);
model.addAttribute("paginationInfo", paginationInfo);
return "admin/board";
}
board.jsp
>전자정부 사용 코드 넣기
> </table> 아래 추가
>페이지 스크립트 작성
> 토클 만들기<한 화면에 몇 개 게시글 나오게 할지 설정하는 것>
> 제이쿼리 가져오기
>전자정부 사용 코드 넣기
<%@ taglib uri="http://egovframework.gov/ctl/ui" prefix="ui"%>
> </table> 아래 추가
<div class="m-2 text-center">
<ui:pagination paginationInfo="${paginationInfo }" type="text" jsFunction="linkPage"/>
</div>
>페이지 스크립트 작성
<script type="text/javascript">
function linkPage(pageNo) {
location.href="./board?pageNo="+pageNo;
}
</script>
>토클 만들기<한 화면에 몇 개 게시글 나오게 할지 설정하는 것>
<div class="">
<select name="perPage" id="perPage" class="form-control">
<option value="1">10</option>
<option value="2">20</option>
<option value="3">30</option>
<option value="4">40</option>
<option value="5">50</option>
<option value="10">100</option>
</select>
</div>
> 제이쿼리 가져오기
$(function(){
$('#perPage').change(function(){
location.href="./board?pageNo=${pageNo}&perPage="+$('#perPage').val();
});
});
</script>
AdminController
> @RequestParam(name = "perPage", defaultValue = "1", required = false) String perPage, 추가
>paginationInfo.setRecordCountPerPage(util.str2Int(perPage) * 10); // 10 20 30 40 50 100 추가
@GetMapping("/board")
public String board(@RequestParam(name = "pageNo", defaultValue = "1") String pageNo,
@RequestParam(name = "perPage", defaultValue = "1", required = false) String perPage,
Model model) {
...
// 전자정부 페이징 pagination
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(util.str2Int(pageNo)); // 현재 페이지 번호
paginationInfo.setRecordCountPerPage(util.str2Int(perPage) * 10); // 10 20 30 40 50 100
}
SearchDTO > recordCountPerPage
package org.mask.dto;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class SearchDTO {
private int pageNo, recordCountPerPage;
private String searchTitle, search; {
}
}
AdminController
>searchDTO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); 추가
// 검색에서 사용할 값 추가
searchDTO.setPageNo(paginationInfo.getFirstRecordIndex());
searchDTO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()*10);
admin-mapper
<select id="boardList" parameterType="searchDTO" resultType="boardDTO">
SELECT b.board_no, b.board_title, m.mname, m.mid ,b.board_date,
b.board_ip, b.board_del
FROM board
LIMIT #{pageNo}, #{recordCountPerPage};
</select>
board.jsp
>검색창 추가
>버튼 추가
>스크립트에 클릭 추가
>검색창 추가
<input type="text" name="search" id="search" class="form-control">
<button type="button" class="btn btn-secondary" id="searchBtn"> 검색</button>
</div>
<button type="button" class="btn btn-success col-4">초기화</button>
>버튼 추가 $('#searchBtn').click(function(){
$(function(){
...
$('#searchBtn').click(function(){
location.href="./board?pageNo=1&perPage=${perPage}&searchTitle="+$('#searchTitle').val()+"&search="+$('#search').val();
});
AdminController
> @RequestParam(name = "search", required = false) String search,
>search 추가
@GetMapping("/board")
public String board(@RequestParam(name = "pageNo", defaultValue = "1") String pageNo,
@RequestParam(name = "perPage", defaultValue = "1", required = false) String perPage,
@RequestParam(name = "searchTitle", required = false) String searchTitle,
@RequestParam(name = "search", required = false) String search, Model model) {
// 전체 글 수에도 DTO 보내기
SearchDTO searchDTO = new SearchDTO();
searchDTO.setSearchTitle(searchTitle);
searchDTO.setSearch(search);
// 전체 글 수 뽑기
int totalRecordCount = adminService.totalRecordCount(searchDTO);
...
List<BoardDTO> list = adminService.boardList(searchDTO);
model.addAttribute("list", list);
model.addAttribute("paginationInfo", paginationInfo);
return "admin/board";
}
AdminService > int totalRecordCount(SearchDTO searchDTO); 추가
package org.mask.service;
import java.util.List;
import org.mask.dto.BoardDTO;
import org.mask.dto.SearchDTO;
public interface AdminService {
List<BoardDTO> boardList(SearchDTO searchDTO);
int totalRecordCount(SearchDTO searchDTO);
}
AdminServiceImpl > searchDTO 추가
@Override
public List<BoardDTO> boardList(SearchDTO searchDTO) {
return adminDAO.boardList(searchDTO);
}
@Override
public int totalRecordCount(SearchDTO searchDTO) {
return adminDAO.totalRecordCount(searchDTO);
}
AdminDAO > searchDTO 추가
public List<BoardDTO> boardList(SearchDTO searchDTO) {
return sqlSession.selectList("admin.boardList",searchDTO);
}
public int totalRecordCount(SearchDTO searchDTO) {
return sqlSession.selectOne("admin.totalRecordCount",searchDTO);
}
admin-mapper
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="admin">
<select id="boardList" parameterType="searchDTO" resultType="boardDTO" >
SELECT board_no, board_title, mno, board_date, board_ip, board_del
FROM board
<where>
<if test="search != null">
board_title LIKE CONCAT('%', #{search}, '%')
OR board_content LIKE CONCAT('%', #{search}, '%')
</if>
</where>
ORDER BY board_no DESC
LIMIT #{pageNo}, #{recordCountPerPage};
</select>
<select id="totalRecordCount" parameterType="String" resultType="Integer">
SELECT COUNT(*)
FROM board
<where>
<if test="search != null"><!-- 서치값이 있다면 -->
board_title LIKE CONCAT('%', #{search}, '%')
OR board_content LIKE CONCAT('%', #{search}, '%')
</if>
</where>
</select>
</mapper>
AdminController> jsp 에 보내주기 위해 pageNo, perPage 추가
List<BoardDTO> list = adminService.boardList(searchDTO);
model.addAttribute("list", list);
model.addAttribute("paginationInfo", paginationInfo);
model.addAttribute("pageNo", pageNo);
model.addAttribute("perPage", perPage);
> url 에 작성한 ${pageNo}, ${perPage} 나옴
board.jsp > 클릭했을 때 url 거의 비슷하게 맞춰주기, 검색 날라올 때 pageNo=1 로 가져오게 스크립트 수정
<script type="text/javascript">
function linkPage(pageNo){
location.href = "./board?pageNo="+pageNo+"&perPage=${perPage}&search=${search}";
}
$(function(){
$('#perPage').change(function(){
location.href="./board?pageNo=1&perPage="+$('#perPage').val()+"&search=${search}";
});
$('#searchBtn').click(function(){
location.href="./board?pageNo=1&perPage=${perPage}
&searchTitle="+$('#searchTitle').val()+"&search="+$('#search').val();
});
});
</script>
'2023.11.21-2024.05.31' 카테고리의 다른 글
20240305 스프링(쿠키-아이디 자동로그인, 세션) (4) | 2024.03.05 |
---|---|
20240304 스프링(페이징, 검색, 게시글 수,searchTitle,postDel) (0) | 2024.03.04 |
20240229 스프링(아이디중복체크(idCheck), 페이징, 검색(search ) (3) | 2024.02.29 |
20240228 스프링(데이터베이스 암호화, 회원가입 -비밀번호 확인) (2) | 2024.02.28 |
20240228 스프링(회원가입) (1) | 2024.02.28 |