頁面展示
思路分析
分頁工具類
public class PageBean<T> {
private Integer pageNo = 1; //目前頁碼數
private Integer pageSize = 4; //每頁顯示的行數
private Integer totalPage; //總頁數
private Integer rows; // 總行數
private List<T> lists; // 存放目前頁面 資料的集合
public Integer getPageNo() {
return pageNo;
}
/**
* 在設定目前頁碼數之前 總頁面要指派
* @param pageNo
*/
public void setPageNo(Integer pageNo) {
if (pageNo<1){
this.pageNo=1;
}else if(pageNo>totalPage){
this.pageNo = totalPage;
}else{
this.pageNo = pageNo;
}
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public Integer getTotalPage() {
return totalPage;
}
public Integer getRows() {
return rows;
}
public void setRows(Integer rows) {
this.rows = rows;
//自動算出總頁數
this.totalPage= this.rows%pageSize==0?this.rows/pageSize:this.rows/pageSize+1;
}
public List<T> getLists() {
return lists;
}
public void setLists(List<T> lists) {
this.lists = lists;
}
}
dao層與dao實作類層
public interface BookInfoDao {
/**
* 計算帶條件查詢的總記錄數
* @param type 圖書類型
* @param name 圖書名稱
* @param is_borrow 是否借閱
* @return
*/
int queryCount(String type,String name,String is_borrow);
/**
* 分頁查詢
* @param type
* @param name
* @param is_borrow
* @param start 每一頁第一個值
* @param end 每頁最後一個值
* @return
*/
List<BookInfo> queryAllBook(String type,String name,String is_borrow,int start,int end);
}
public class BookInfoDaoImpl implements BookInfoDao {
QueryRunner queryRunner = C3P0Util.getQueryRunner();
/**
* 查詢條數
* @param type
* @param name
* @param is_borrow
* @return
*/
@Override
public int queryCount(String type, String name, String is_borrow) {
StringBuffer sb = new StringBuffer();
//使用集合存儲
List<String> params = new ArrayList<>();
String sql = " SELECT count(*) from book_info where 1=1";
sb.append(sql);
if (type!=null&!"0".equals(type)){
sb.append(" and book_type = ?");
params.add(type);
}
if (name!=null&!"".equals(name)){
sb.append(" and book_name LIKE ?");
params.add("%"+name+"%");
}
if (is_borrow!=null&!"-1".equals(is_borrow)){
sb.append(" and is_borrow = ?");
params.add(is_borrow);
}
Long count=0L;//總記錄數
try {
count = (Long)queryRunner.query(sb.toString(),new ScalarHandler(1),params.toArray());
} catch (SQLException e) {
e.printStackTrace();
}
return count.intValue();
}
/**
* 分頁查詢
* @param type
* @param name
* @param is_borrow
* @param start
* @param end
* @return
*/
@Override
public List<BookInfo> queryAllBook(String type, String name, String is_borrow, int start, int end) {
StringBuffer sb = new StringBuffer();
//使用集合存儲
List params = new ArrayList<>();
String sql = "select * from book_info INNER JOIN book_type ON book_info.book_type = book_type.id where 1=1 ";
sb.append(sql);
if (type!=null&!"0".equals(type)){
sb.append(" and book_type = ?");
params.add(type);
}
if (name!=null&!"".equals(name)){
sb.append(" and book_name LIKE ?");
params.add("%"+name+"%");
}
if (is_borrow!=null&!"-1".equals(is_borrow)){
sb.append(" and is_borrow = ?");
params.add(is_borrow);
}
sb.append(" limit ?,?");
params.add(start);
params.add(end);
List<BookInfo> bookInfos = null;
try {
bookInfos = queryRunner.query(sb.toString(),new BeanListHandler<BookInfo>(BookInfo.class),params.toArray());
} catch (SQLException e) {
e.printStackTrace();
}
return bookInfos;
}
}
service層與service實作層
public interface BookInfoService {
/**
* 計算帶條件查詢的總記錄數
* @param type
* @param name
* @param is_borrow
* @return
*/
int queryCount(String type, String name, String is_borrow);
/**
* 分頁查詢
* @param type
* @param name
* @param is_borrow
* @param start
* @param end
* @return
*/
List<BookInfo> queryAllBook(String type, String name, String is_borrow,int start,int end);
}
public class BookInfoServiceImpl implements BookInfoService {
BookInfoDao dao = new BookInfoDaoImpl();
@Override
public int queryCount(String type, String name, String is_borrow) {
return dao.queryCount(type,name,is_borrow);
}
@Override
public List<BookInfo> queryAllBook(String type, String name, String is_borrow, int start, int end) {
return dao.queryAllBook(type,name,is_borrow,start,end);
}
}
servlet控制層
@WebServlet(name = "BookServlet" )
public class BookServlet extends HttpServlet {
BookInfoService bookInfoService = new BookInfoServiceImpl();
BookTypeService bookTypeService = new BookTypeServiceImpl();
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//通用方法 判斷進入什麼方法
String choose = request.getParameter("choose");
switch (choose){
case "3":
//System.out.println("模糊查詢");
queryLikeBook(request,response);
break;
}
}
//取 調 存 轉
protected void queryLikeBook(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
//調
String type = request.getParameter("type");
String name = request.getParameter("name");
String is_borrow = request.getParameter("is_borrow");
//擷取目前頁碼數
String now = request.getParameter("now");
//建立分頁查詢工具類的對象
PageBean<BookInfo> pageBean = new PageBean<>();
//為了預防設定目前頁碼數時 總頁數為零引起的 頁碼數不對的問題 先給分頁工具類的總頁數指派
//查詢得到的總資料
int count = bookInfoService.queryCount(type, name, is_borrow);
pageBean.setRows(count);
//如果now為 null 沒有擷取到 下面代碼會引發 空指針異常
if (now!=null){
pageBean.setPageNo(Integer.valueOf(now));
}
//每一頁的第一個元素
int first = (pageBean.getPageNo()-1)*pageBean.getPageSize();
//每一頁的最後一個元素
int end = pageBean.getPageSize();
List<BookInfo> bookInfos = bookInfoService.queryAllBook(type, name, is_borrow,first,end);
//将目前頁面資料集合存儲到分頁工具類中
pageBean.setLists(bookInfos);
//擷取所有圖書類型
List<BookType> bookTypes = bookTypeService.queryAllBookType();
//存
HttpSession session = request.getSession();
session.setAttribute("bookTypes",bookTypes);
session.setAttribute("pageBean",pageBean);
session.setAttribute("type",type);
session.setAttribute("name",name);
session.setAttribute("is_borrow",is_borrow);
//轉
response.sendRedirect("/jsp/book.jsp");
}
}
前端頁面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>圖書借閱系統</title>
<link rel="stylesheet" href="../css/book.css">
</head>
<body>
<div class="bigDiv">
<!--頭部-->
<div class="headDiv">
<form action="/BookServlet" method="get">
<h2>圖書借閱系統</h2>
<table class="oneTable">
<tr>
<td>
<input value="3" name="choose" hidden>
<!--目前頁碼數-->
<input id="now" name="now" hidden value="1">
圖書分類:
<select name="type">
<option value="0" >全部</option>
<c:forEach items="${bookTypes}" var="bookType">
<option value="${bookType.id}" <c:if test="${bookType.id==type}">selected</c:if>>${bookType.type_name}</option>
</c:forEach>
</select>
圖書名稱:<input type="text" name="name" value="${name}">
是否借閱:
<select name="is_borrow">
<option value="-1">請選擇</option>
<option value="0" <c:if test="${is_borrow==0}">selected</c:if>>未借閱</option>
<option value="1" <c:if test="${is_borrow==1}">selected</c:if>>已借閱</option>
</select>
<%--<input name="choose" hidden value="1">--%>
<input type="submit" value="查詢">
</td>
</tr>
</table>
<a href="../jsp/addBook.jsp">添加</a>
</form>
</div>
<!--中部-->
<div class="bodyDiv">
<table>
<thead>
<button id="deleteAll" onclick="deleteAll();">批量删除</button>
<tr>
<td>圖書編号</td>
<td>圖書分類</td>
<td>圖書名稱</td>
<td>作者</td>
<td>出版社</td>
<td>操作</td>
<td>詳情</td>
<td>删除</td>
<td>修改</td>
<td><input type="checkbox" onclick="delAll(this)"></td>
</tr>
</thead>
<tbody>
<form action="/BookServlet" id="form1">
<input type="text" value="7" name="choose" hidden>
<c:forEach items="${pageBean.lists}" var="bookInfo">
<tr>
<td>${bookInfo.book_code}</td>
<td>${bookInfo.type_name}</td>
<td>${bookInfo.book_name}</td>
<td>${bookInfo.book_author}</td>
<td>${bookInfo.publish_press}</td>
<td>
<c:if test="${bookInfo.is_borrow==0}"><a href="#">未借閱</a></c:if>
<c:if test="${bookInfo.is_borrow==1}"><a href="#">已借閱</a></c:if>
</td>
<td><a href="/BookServlet?id=${bookInfo.book_id}&choose=4">詳情 </a></td>
<td><a href="/BookServlet?id=${bookInfo.book_id}&choose=5">删除</a></td>
<td><a href="/BookServlet?id=${bookInfo.book_id}&choose=6">修改</a></td>
<td><input type="checkbox" name="id" value="${bookInfo.book_id}"></td>
</tr>
</c:forEach>
</form>
</tbody>
<tfoot id="tfootID">
<tr>
<td colspan="10">
<a href="javascript:doPage(1);">首頁</a>
<a href="javascript:doPage(${pageBean.pageNo-1});">上一頁</a>
<a href="javascript:doPage(${pageBean.pageNo+1});">下一頁</a>
<a href="javascript:doPage(${pageBean.totalPage});">末頁</a>
${pageBean.pageNo}/${pageBean.totalPage}
<input type="text" id="pageNum">
<button onclick="doPage($('#pageNum').val())">go</button>
</td>
</tr>
</tfoot>
</table>
</div>
</div>
</body>
<script type="text/javascript" src="../js/jquery-1.8.3.min.js"></script>
<script type="text/javascript">
function doPage(num) {
//給查詢表單的目前頁面指派
$("#now").val(num);
//送出表單
$(".headDiv form").submit();
}
//全選
function delAll(b) {
$("input[name='box']").attr("checked",b.checked);
}
//送出表單
function deleteAll() {
$("#form1").submit();
}
</script>
</html>