组团学

分页-准备工作

阅读 (838377)

1、准备工作

1.1、sql语句

建库,键表

drop database customers; CREATE DATABASE IF NOT EXISTS customers; USE customers; CREATE TABLE t_customer( cid CHAR(32) PRIMARY KEY, cname VARCHAR(40) NOT NULL, gender VARCHAR(6) NOT NULL, birthday CHAR(10), cellphone VARCHAR(15) NOT NULL, email VARCHAR(40), description VARCHAR(500) );

1.2、导包

image20200426170858260.png

1.3、配置文件

c3p0-config.xml

<?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <!-- 这是默认配置信息 --> <default-config> <!-- 连接四大参数配置 --> <property name="jdbcUrl">jdbc:mysql://localhost:3306/customers</property> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="user">root</property> <property name="password">poi</property> <!-- 池参数配置 --> <property name="acquireIncrement">3</property> <property name="initialPoolSize">10</property> <property name="minPoolSize">2</property> <property name="maxPoolSize">10</property> </default-config> <!-- 专门为oracle提供的配置信息 --> <named-config name="oracle-config"> <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb1</property> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="user">root</property> <property name="password">poi</property> <property name="acquireIncrement">3</property> <property name="initialPoolSize">10</property> <property name="minPoolSize">2</property> <property name="maxPoolSize">10</property> </named-config> </c3p0-config>

1.4、domain对象

Customer.java

public class Customer { /* * 对应数据库表 */ private String cid;// 主键 private String cname;// 客户名称 private String gender;// 客户性别 private String birthday;// 客户生日 private String cellphone;// 客户手机 private String email;// 客户邮箱 private String description;// 客户的描述 public String getCid() { return cid; } public void setCid(String cid) { this.cid = cid; } public String getCname() { return cname; } public void setCname(String cname) { this.cname = cname; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getBirthday() { return birthday; } public void setBirthday(String birthday) { this.birthday = birthday; } 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; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } @Override public String toString() { return "Customer [cid=" + cid + ", cname=" + cname + ", gender=" + gender + ", birthday=" + birthday + ", cellphone=" + cellphone + ", email=" + email + ", description=" + description + "]"; } }

1.5、往表中插入批量数据

CustomerTest.java

public class CustomerTest { @Test public void fun1() { CustomerDao dao = new CustomerDao(); for(int i = 1; i <= 300; i++) { Customer c = new Customer(); c.setCid(CommonUtils.uuid()); c.setCname("cstm_" + i); c.setBirthday("2014-07-13"); c.setGender(i%2==0?"男":"女"); c.setCellphone("139" + i); c.setEmail("cstm_" + i + "@163.com"); c.setDescription("我是客户"); dao.add(c); } } }

CustomerDao.java

public class CustomerDao { private QueryRunner qr = new QueryRunner(new ComboPooledDataSource()); /** * 添加客户 * * @param c */ public void add(Customer c) { try { String sql = "insert into t_customer values(?,?,?,?,?,?,?)"; Object[] params = { c.getCid(), c.getCname(), c.getGender(), c.getBirthday(), c.getCellphone(), c.getEmail(), c.getDescription()}; qr.update(sql, params); } catch(SQLException e) { throw new RuntimeException(e); } } }

CommonUtils.java

public class CommonUtils { /** * 返回一个不重复的字符串 * @return */ public static String uuid() { return UUID.randomUUID().toString().replace("-", "").toUpperCase(); } }

2、什么是分页

第N页/共M页 首页 上一页 1 2 3 4 5 6 7 8 9 10下一页 尾页

分页的优点:只查询一页,不用查询所有页!

3、分页数据分析

页面的数据都是由Servlet传递过来的

那么Servlet需要提供给当前页面的数据有哪些呢?

  • 当前页页码(pageCode,pc):Servlet提供;

    pc:如果页面没有传递当前页码,那么Servlet默认是第一页,或者按页面传递的来准!

  • 共几页(totalPage,tp):Servlet提供;

    tp=总记录数/每页记录数

    select count(*) from t_customer;

  • 总记录数:totalpages,tp

  • 每页记录数:业务记录数或叫系统数据!10行!

  • 当前页数据(beanList):Servlet提供;

4、数据的传递:PageBean(把分布数据封装成PageBean类对象)

public class PageBean<T> { private List<T> beanList;// 当前页记录数, 需要传递 private int tr;// 总记录数, 需要传递 private int pc;// 当前页码, 需要传递 private int ps;// 每页记录数, 需要传递 private int tp;// 总页数, 计算 //其他的提供get/set方法 //但tp只提供get方法 public int getTp(){ tp=tr/ps; return tr%ps==0?tp:tp+1; } }

需要 登录 才可以提问哦