jsp与servlet实现分页查询

页面展示

在这里插入图片描述

思路分析

在这里插入图片描述

分页工具类

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>&nbsp;
                            <a href="javascript:doPage(${pageBean.pageNo-1});">上一页</a>&nbsp;
                            <a href="javascript:doPage(${pageBean.pageNo+1});">下一页</a>&nbsp;
                            <a href="javascript:doPage(${pageBean.totalPage});">末页</a>&nbsp;
                            ${pageBean.pageNo}/${pageBean.totalPage}&nbsp;
                            <input type="text" id="pageNum">&nbsp;
                            <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>

猜你喜欢

转载自blog.csdn.net/weixin_43951534/article/details/89932028