JavaWeb(十)JDBC——分页

本文介绍了使用JavaWeb和JDBC实现分页查询的方法。通过Servlet、DAO和服务层的配合,展示如何处理数据库查询并展示分页结果。内容包括分页的作用、组成、配置和实现步骤,同时涉及SQL的limit关键字以及动态生成分页页码列表的逻辑。
摘要由CSDN通过智能技术生成

分页其实随处可见,例如说最常用的百度搜索后的结果显示,亦或者说论坛中的显示帖子列表。分页实现的方式有很多种,在这一章里主要讲的是用SQL语句结合Servlet来实现分页效果。

目录

分页

    作用

    组成

    例子

        配置

        实现

后话


分页

    作用

分页的作用其实很简单,就是将数据分割成多个页面来进行显示。若数据量过于庞大,在一个页面内全部显示,第一会影响到用户的体验,第二会加重服务器的承载负担。

    组成

每一个页面中需要包含哪一些才能实现分页的效果呢?在这里列出需要的数据:

    '''
        1.要显示的数据结果集:beanList,通过查询数据库得来。
        2.当前页:currentPage,通过页面传递到后台,默认第一页
        3.总页数:totalPage,通过后台计算得来
        4.总记录数:totalRecord,通过查询数据库得来
        5.每页记录数:pageSize,即每一页显示的记录条数
        6.请求参数:url
    '''

通过上面列举的发现,其实只有两个数据是从数据库中获取,其余的都是通过计算而来。那么需要计算的数据所用到的公式如下:

    总页数:
        totalPage = 总条数 % 每页记录数 == 0? 总条数/每页记录数 : 总条数/每页记录数+1

    例子

        配置

    这里以学生信息为例,页面从简,只分了五个:index.jsp、welcome.jsp、top.jsp、list.jsp、query.jsp。

    需要导入的包如下所示:

    首先在MYSQL创建一个名为school的数据库,数据库内再新建一个学生表tb_student,SQL语句如下所示:

        CREATE DATABASE IF NOT EXISTS school;
        use school;
        CREATE TABLE tb_student (
            sid char(32) PRIMARY KEY,
            sname varchar(30) NOT NULL,
            gender varchar(6) NOT NULL,
            age int(11) NOT NULL,
            cellphone varchar(15) NOT NULL,
            email varchar(40) NOT NULL
        );

    接着配置项目中各层的基本分工,如下所示:

    其中,domain层表示相关的业务数据类,dao层表示对数据库的操作,service层则是业务逻辑层,servlet层则为处理请求的地方。

    分别在domain、dao、service、servlet层创建相关的类文件,如下所示:

    domain

public class Student {
    private String sid;
    private String sname;
    private String gender;
    private int age;
    private String cellphone;
    private String email;

    public String getSid() {
        return sid;
    }

    public void setSid(String sid) {
        this.sid = sid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public int getAge() {
        return age;
    }
    
    public void setAge(int age) {
        this.age = age;
    }

    public String getCellphone() {
        return cellphone;
    }

    public void setCellphone(String cellphone) {
        this.cellphone = cellphone;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

    dao

public class StudentDao {
    private QueryRunner qr = new ExQueryRunner();
}

    service

public class StudentService {
    private StudentDao studentDao = new StudentDao();
}

    servlet

    在早期中一篇文章中曾经提及过一个BaseServlet,即能够处理多个请求方法的一个Servlet(链接:)。在这里就得令StudentServlet继承这个BaseServlet。因此,StudentServlet代码如下所示:

public class StudentServlet extends BaseServlet {
    private StudentService studentService = new StudentService();
}

    在这里要用到先前写到的几个小工具,分别如下所示:

CommonUtils

public class CommonUtils {
    public static String uuid() {
        return UUID.randomUUID().toString().replace("-", "").toUpperCase();
    }
	
    public static <T> T toBean(Map map, Class<T> clazz) {
        try {
            /*
             * 1. 通过参数clazz创建实例
             * 2. 使用BeanUtils.populate把map的数据封闭到bean中
             */
            T bean = clazz.newInstance();
            ConvertUtils.register(new DateConverter(), java.util.Date.class);
            BeanUtils.populate(bean
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值