diff --git a/jspblog/src/main/java/com/example/jspblog/domain/board/BoardDao.java b/jspblog/src/main/java/com/example/jspblog/domain/board/BoardDao.java index 2085907f..7cfef4d4 100644 --- a/jspblog/src/main/java/com/example/jspblog/domain/board/BoardDao.java +++ b/jspblog/src/main/java/com/example/jspblog/domain/board/BoardDao.java @@ -90,6 +90,28 @@ public class BoardDao { return -1; } + public int count(String keword) { + String sql = "select count(*) from board where title like ?"; + + Connection conn = DB.getConnection(); + PreparedStatement pstmt = null; + ResultSet rs = null; + + if (conn != null) { + try { + pstmt = conn.prepareStatement(sql); + pstmt.setString(1, "%" + keword + "%"); + rs = pstmt.executeQuery(); + if (rs.next()) return rs.getInt(1); + } catch (Exception e) { + e.printStackTrace(); + } finally { + DB.close(conn, pstmt, rs); + } + } + return -1; + } + public DetailResDto findById(int id) { String sql = "select b.*, u.username from board b left outer join user u on b.userId = u.id where b.id = ?"; Connection conn = DB.getConnection(); @@ -182,4 +204,38 @@ public class BoardDao { } return -1; } + + public List findByKeyword(String keyword, int page) { + String sql = "select * from board where title like ? order by id desc limit ?, 4"; + Connection conn = DB.getConnection(); + PreparedStatement pstmt = null; + ResultSet rs = null; + List boards = new ArrayList<>(); + + if (conn != null) { + try { + pstmt = conn.prepareStatement(sql); + pstmt.setString(1, "%" + keyword + "%"); + pstmt.setInt(2, page * 4); + rs = pstmt.executeQuery(); + while (rs.next()) { + Board board = Board.builder() + .id(rs.getInt("id")) + .title(rs.getString("title")) + .content(rs.getString("content")) + .readCount(rs.getInt("readCount")) + .userId(rs.getInt("userId")) + .createDate(rs.getTimestamp("createDate")) + .build(); + boards.add(board); + } + return boards; + } catch (Exception e) { + e.printStackTrace(); + } finally { + DB.close(conn, pstmt, rs); + } + } + return null; + } } diff --git a/jspblog/src/main/java/com/example/jspblog/service/BoardService.java b/jspblog/src/main/java/com/example/jspblog/service/BoardService.java index 6663f334..91373085 100644 --- a/jspblog/src/main/java/com/example/jspblog/service/BoardService.java +++ b/jspblog/src/main/java/com/example/jspblog/service/BoardService.java @@ -27,6 +27,9 @@ public class BoardService { public int 글개수() { return boardDao.count(); } + public int 글개수(String keword) { + return boardDao.count(keword); + } public DetailResDto 글상세보기(int id) { int result = boardDao.updateReadCount(id); @@ -40,4 +43,8 @@ public class BoardService { public int 글수정(UpdateReqDto dto) { return boardDao.update(dto); } + + public List 글검색(String keyword, int page) { + return boardDao.findByKeyword(keyword, page); + } } diff --git a/jspblog/src/main/java/com/example/jspblog/web/BoardController.java b/jspblog/src/main/java/com/example/jspblog/web/BoardController.java index b6d11d84..1984c144 100644 --- a/jspblog/src/main/java/com/example/jspblog/web/BoardController.java +++ b/jspblog/src/main/java/com/example/jspblog/web/BoardController.java @@ -130,6 +130,20 @@ public class BoardController extends HttpServlet { Script.back(response, "글 수정 실패"); } } + case "search" : { + String keyword = request.getParameter("keyword"); + int page = Integer.parseInt(request.getParameter("page")); + + List boards = boardService.글검색(keyword, page); + int boardCount = boardService.글개수(keyword); + int lastPage = (boardCount - 1) / 4; + double currentPosition = (double) page / lastPage * 100; + request.setAttribute("boards", boards); + request.setAttribute("lastPage", lastPage); + request.setAttribute("currentPosition", currentPosition); + request.getRequestDispatcher("board/list.jsp").forward(request, response); + break; + } } } } diff --git a/jspblog/src/main/webapp/board/list.jsp b/jspblog/src/main/webapp/board/list.jsp index 7e05636c..09f41baa 100644 --- a/jspblog/src/main/webapp/board/list.jsp +++ b/jspblog/src/main/webapp/board/list.jsp @@ -8,8 +8,7 @@
- - +
@@ -29,12 +28,23 @@