书城后台管理的增删改查功能以及分页实现

 

9a64cc8aff4884e9034c20a8da3b2314986.jpg

db1e015f637a8bc11ef1ed06c065a921147.jpg

5e3d12b35749038222f9c97a6d634278e9d.jpg

点击图书管理按钮进入图书管理列表

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<div>
	<a href="BookServlet?method=getBooksByPage">图书管理</a>
	<a href="pages/manager/order_manager.jsp">订单管理</a>
	<a href="index.jsp">返回商城</a>
</div>

70f5d3daa07779c1aee317f945572382efb.jpg

对于根据页面值发送请求还是第一次进入页面的请求做了判断,判断如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>图书管理</title>
<%@ include file="/WEB-INF/include/base.jsp" %>
<script type="text/javascript">
	$(function(){
		$(".dela").click(function(){
// 			var title = $(this).parents("tr").children().html();
			var title = $(this).attr("id");
			if(confirm("确定删除【"+title+"】吗?") == false){
				return false;
			}
		});
		
		//实现确定按钮分页查询
		$("#sub_page").click(function(){
			//取pageNo值
			var pageNo = $("#pn_input").val();
			//请求BookServlet
			location = "BookServlet?method=getBooksByPage&pageNo="+pageNo;
		});
		
	});
</script>
</head>
<body>
	
	<div id="header">
			<img class="logo_img" alt="" src="static/img/logo.gif" >
			<span class="wel_word">图书管理系统</span>
			<%@ include file="/WEB-INF/include/header.jsp" %>
	</div>
	
	<div id="main">
		<table>
			<tr>
				<td>名称</td>
				<td>价格</td>
				<td>作者</td>
				<td>销量</td>
				<td>库存</td>
				<td colspan="2">操作</td>
			</tr>	
			<c:forEach items="${requestScope.page.list }" var="book">
				<tr>
					<td>${book.title }</td>
					<td>${book.price }</td>
					<td>${book.author }</td>
					<td>${book.sales }</td>
					<td>${book.stock }</td>
					<td><a href="BookServlet?method=getBookById&bookId=${book.id }">修改</a></td>
					<td><a class="dela" id="${book.title }" href="BookServlet?method=delBookById&bookId=${book.id }">删除</a></td>
				</tr>	
			</c:forEach>
			<tr>
				<td></td>
				<td></td>
				<td></td>
				<td></td>
				<td></td>
				<td></td>
				<td><a href="pages/manager/book_update.jsp">添加图书</a></td>
			</tr>	
		</table>
		<br>
		<br>
		<div id="page_nav">
			<a href="BookServlet?method=getBooksByPage&pageNo=1">首页</a>
			<c:if test="${page.pageNo>1 }">
				<a href="BookServlet?method=getBooksByPage&pageNo=${page.pageNo-1 }">上一页</a>
			</c:if>
			<c:if test="${page.pageNo<page.totalPageNo }">
				<a href="BookServlet?method=getBooksByPage&pageNo=${page.pageNo+1 }">下一页</a>
			</c:if>
			<a href="BookServlet?method=getBooksByPage&pageNo=${page.totalPageNo }">末页</a>
			共${requestScope.page.pageNo }/${requestScope.page.totalPageNo }页,${requestScope.page.totalRecord}条记录
			 到第<input value="${requestScope.page.pageNo }" name="pn" id="pn_input"/>页
			<input id="sub_page" type="button" value="确定">	
		</div>
		
	</div>
	
	<div id="bottom">
		<span>
			尚硅谷书城.Copyright &copy;2015
		</span>
	</div>
</body>
</html>

5ec985e51ea7c9957a1fd0d00979540001c.jpg

d11bab8531fc9076bd7e4eacadb8f52d0a8.jpg

95bc3c02c8667edad62c271e96bdd1dc805.jpg

package com.atguigu.bean;

import java.io.Serializable;
import java.util.List;

public class Page<T> implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	//   5/19	
	private int pageNo;						//当前页码					用户
	private int totalPageNo;				//总页数=总条数/每页显示的个数	计算
	private int totalRecord;				//总条数					dao,sql:select count(*) from books
	public static final int PAGE_SIZE = 4;	//每页显示的个数				静态常量
	private List<T> list;					//当前页的数据集合			dao,sql:SELECT * FROM books LIMIT (pageNo-1)*PAGE_SIZE,PAGE_SIZE
	
	public int getPageNo() {
		if(pageNo < 1) {
			return 1;
		}
		if(pageNo > getTotalPageNo()) {
			return getTotalPageNo();
		}
		return pageNo;
	}
	public void setPageNo(int pageNo) {
		this.pageNo = pageNo;
	}
	/**
	 * 计算总页数
	 * @return
	 */
	public int getTotalPageNo() {
		return totalRecord%PAGE_SIZE==0?totalRecord/PAGE_SIZE:totalRecord/PAGE_SIZE+1;
	}
	public void setTotalPageNo(int totalPageNo) {
		this.totalPageNo = totalPageNo;
	}
	public int getTotalRecord() {
		return totalRecord;
	}
	public void setTotalRecord(int totalRecord) {
		this.totalRecord = totalRecord;
	}
	public List<T> getList() {
		return list;
	}
	public void setList(List<T> list) {
		this.list = list;
	}
//	public static int getPageSize() {
//		return PAGE_SIZE;
//	}
	public Page(int pageNo, int totalPageNo, int totalRecord, List<T> list) {
		super();
		this.pageNo = pageNo;
		this.totalPageNo = totalPageNo;
		this.totalRecord = totalRecord;
		this.list = list;
	}
	public Page() {
		super();
		// TODO Auto-generated constructor stub
	}
	@Override
	public String toString() {
		return "Page [pageNo=" + pageNo + ", totalPageNo=" + totalPageNo + ", totalRecord=" + totalRecord + ", list="
				+ list + "]";
	}
	
}
package com.atguigu.servlet;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.atguigu.bean.Book;
import com.atguigu.bean.Page;
import com.atguigu.service.BookService;
import com.atguigu.service.impl.BookServiceImpl;

/**
 * Servlet implementation class BookServlet
 */
public class BookServlet extends BaseServlet {
	private static final long serialVersionUID = 1L;
    
	private BookService bookService = new BookServiceImpl();
	/**
	 * 查询所有book信息
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
//	protected void getAllBooks(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//		//取值(不用)
//		//调用service中的相应方法
//		List<Book> books = bookService.getAllBooks();
//		//将books存放到域中
//		request.setAttribute("books",books);
//		//跳转,book_manager.jsp
//		request.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(request, response);
//	}
	/**
	 * 分页查询book
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	protected void getBooksByPage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//取值
		String pageNo = request.getParameter("pageNo");
		//调用service
		Page<Book> page = bookService.getBookByPage(pageNo);
		//将page存放到域中
		request.setAttribute("page", page);
		//跳转
		request.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(request, response);
	}
	
	/**
	 * 添加book信息
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	protected void delBookById(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//取值
		String bookId = request.getParameter("bookId");
		//调用service
		bookService.delBookById(bookId);
		//跳转
		response.sendRedirect(request.getContextPath()+"/BookServlet?method=getBooksByPage");
	}
	
	
	/**
	 * 通过id获取book信息
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	protected void getBookById(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//取bookid值
		String id = request.getParameter("bookId");
		//调用Service
		Book book = bookService.getBookById(id);
		//将book存放域中
		request.setAttribute("book", book);
		//跳转,book_update.jsp
		request.getRequestDispatcher("/pages/manager/book_update.jsp").forward(request, response);
	}
	
	/**
	 * 添加book信息
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
//	protected void addBook(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//		//取值
//		String title = request.getParameter("title");
//		String author = request.getParameter("author");
//		String price = request.getParameter("price");
//		String sales = request.getParameter("sales");
//		String stock = request.getParameter("stock");
//		//调用service
//		bookService.addBook(new Book(null, title, author, Double.parseDouble(price), Integer.parseInt(sales), Integer.parseInt(stock), null));
//		//跳转,重新查询,book_manager.jsp
		getAllBooks(request, response);
//		response.sendRedirect(request.getContextPath()+"/BookServlet?method=getAllBooks");
//	}
	/**
	 * 通过id获取book信息
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	protected void updateBook(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//取值
		String id = request.getParameter("bookId");
		String title = request.getParameter("title");
		String author = request.getParameter("author");
		String price = request.getParameter("price");
		String sales = request.getParameter("sales");
		String stock = request.getParameter("stock");
		//通过判断id值是否为空,执行相应方法
		//调用service
		if(id == null || "".equals(id)) {
			//调用addBook()
			bookService.addBook(new Book(null, title, author, Double.parseDouble(price), Integer.parseInt(sales), Integer.parseInt(stock), null));
		}else {
			//调用updateBook()
			bookService.updateBook(new Book(Integer.parseInt(id), title, author, Double.parseDouble(price), Integer.parseInt(sales), Integer.parseInt(stock), null));
		}
		//跳转
		response.sendRedirect(request.getContextPath()+"/BookServlet?method=getBooksByPage");
	}
	
	
}
package com.atguigu.service.impl;

import java.util.List;

import com.atguigu.bean.Book;
import com.atguigu.bean.Page;
import com.atguigu.dao.BookDao;
import com.atguigu.dao.impl.BookDaoImpl;
import com.atguigu.service.BookService;

public class BookServiceImpl implements BookService {

	private BookDao bookDao = new BookDaoImpl();
	
	@Override
	public List<Book> getAllBooks() {
		return bookDao.getAllBooks();
	}

	@Override
	public void addBook(Book book) {
		bookDao.addBook(book);
	}

	@Override
	public void delBookById(String id) {
		bookDao.delBookById(id);
	}

	@Override
	public Book getBookById(String id) {
		return bookDao.getBookById(id);
	}

	@Override
	public void updateBook(Book book) {
		bookDao.updateBook(book);
	}

	@Override
	public Page<Book> getBookByPage(String pageNo) {
		Page<Book> page = new Page<Book>();
		int pNo = 1;//先设置为1,保证第一次访问页面时有值
		try {
			//若传入的有具体的值,就按具体的值来pageNo为String类型的Integer.parseInt(PageNo)
			//万一不可预知原因PageNo为null,那么程序直接崩掉,防止这个捕获一下
			pNo = Integer.parseInt(pageNo);
		} catch (NumberFormatException e) {
//			e.printStackTrace();
		}
		page.setPageNo(pNo);
		return bookDao.getBooksByPage(page);
	}

	@Override
	public Page<Book> getBookByPageAndPrice(String pageNo, String min, String max) {
		Page<Book> page = new Page<Book>();
		int pNo = 1;
		try {
			pNo = Integer.parseInt(pageNo);
		} catch (NumberFormatException e) {
//			e.printStackTrace();
		}
		page.setPageNo(pNo);
		//处理min,max
		double minEnd = 0;
		double maxEnd = Double.MAX_VALUE;
		try {
			minEnd = Double.parseDouble(min);
			maxEnd = Double.parseDouble(max);
			//交换值
			double temp=0;
			if(minEnd > maxEnd) {
				temp = minEnd;
				minEnd = maxEnd;
				maxEnd = temp;
			}
		} catch (NumberFormatException e) {
//			e.printStackTrace();
		}
		return bookDao.getBooksByPageAndPrice(page, minEnd, maxEnd);
	}

}
package com.atguigu.dao.impl;

import java.util.List;

import com.atguigu.bean.Book;
import com.atguigu.bean.Page;
import com.atguigu.dao.BaseDao;
import com.atguigu.dao.BookDao;

public class BookDaoImpl extends BaseDao<Book> implements BookDao {

	@Override
	public List<Book> getAllBooks() {
		String sql = "SELECT id,title,author,price,sales,stock,img_path FROM books";
		return this.getBeanList(sql);
	}

	@Override
	public void addBook(Book book) {
		String sql = "insert into books(title,author,price,sales,stock,img_path) values(?,?,?,?,?,?)";
		this.update(sql, book.getTitle(),book.getAuthor(),book.getPrice(),book.getSales(),book.getStock(),book.getImgPath());
	}

	@Override
	public void delBookById(String id) {
		String sql = "delete from books where id = ?";
		this.update(sql, id);
	}

	@Override
	public Book getBookById(String id) {
		String sql = "SELECT id,title,author,price,sales,stock,img_path FROM books WHERE id = ?";
		return this.getBean(sql, id);
	}

	@Override
	public void updateBook(Book book) {
		String sql = "update books set title=?,author=?,price=?,sales=?,stock=? where id=?";
		this.update(sql, book.getTitle(),book.getAuthor(),book.getPrice(),book.getSales(),book.getStock(),book.getId());
	}
	@Override
	public void updateBook(int stock, int sales, int id) {
		String sql = "update books set sales=?,stock=? where id=?";
		this.update(sql,sales,stock,id);
	}
	@Override
	public void updateBook(Object[][] params) {
		String sql = "update books set sales=?,stock=? where id=?";
		this.batchUpdate(sql,params);
	}
	
	@Override
	public Page<Book> getBooksByPage(Page<Book> page) {
		//page:pageNo PAGE_SIZE totalPageNo
		//dao:totalRecord
		String sql = "select count(*) from books";
		//long(int) Integer.parse 强转是为了防止报错,this.getSingeValue(sql)返回值为long
		//long怎么转为Integer呢?先+""然后再进行转换
		int count = Integer.parseInt(this.getSingeValue(sql)+"");  
		//将totalRecord赋值
		page.setTotalRecord(count);//数据总条数
//		System.out.println("record:"+page.getTotalRecord());
//		System.out.println("pageNo:"+page.getTotalPageNo());
		//dao:list
		String sql2 = "SELECT id,title,author,price,sales,stock,img_path "
				+ "FROM books "
				+ "WHERE 1=1 "
				+ "LIMIT ?,?";
		//pageNo页从(page.getPageNo()-1)*Page开始为第一条数据,Page.PAGE_SIZE为一页展示多少条数据
		List<Book> list = this.getBeanList(sql2, (page.getPageNo()-1)*Page.PAGE_SIZE,Page.PAGE_SIZE);
		//将list存放到page中
		page.setList(list);
		return page;
	}

	@Override
	public Page<Book> getBooksByPageAndPrice(Page<Book> page,double min,double max) {
		String sql = "SELECT count(*) "
				+ "FROM books "
				+ "WHERE 1=1 "
				+ "AND price BETWEEN ? AND ?";
		int count = Integer.parseInt(this.getSingeValue(sql, min,max)+"");  //long(int) Integer.parse
		//将totalRecord赋值
		page.setTotalRecord(count);
		//dao:list
		String sql2 = "SELECT id,title,author,price,sales,stock,img_path "
				+ "FROM books "
				+ "WHERE 1=1 "
				+ "AND price BETWEEN ? AND ? "
				+ "LIMIT ?,?";
		List<Book> list = this.getBeanList(sql2, min,max,(page.getPageNo()-1)*Page.PAGE_SIZE,Page.PAGE_SIZE);
		//将list存放到page中
		page.setList(list);
		return page;
	}


	
	
}

 

转载于:https://my.oschina.net/architectliuyuanyuan/blog/3063133

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值