java面试题如何实现分页_【Java面试题】之分页功能的实现

以下内容是根据网上内容以及传智播客教学整理而来,侵删。

百度知道网友@starstroll 的回答:

分页的实现可分为两大类:一、数据在Java代码中进行分页,然后取得当前页数据;二、在数据库中直接取得当前页数据。

通常面试官都希望听到后者,因为那才是高效的方法。你如果想让面试官觉得你的能力高的话你就先否定他的问题,你可以回答说:“Java中根本不需要做分页的实现代码只管拿数据库中的当前页数据即可,数据分页功能应该交由SQL处理,在分页实现中Java最多只实现总页数的计算,除此以外几乎不用管。”如果你这么答的话面试官通常会问你总页数的算法,至于这个你可以网上找个高效点的方法,我现在知道最高效的就是:(数据总行数+每页数据行数-1)/每页数据行数。

算法可能有更高效的,你可以到网上找找。记住只在面试中才能这么答,笔试的话老老实实写出实现方法。否定面试官的问题会让他觉得你更professional,但不要太嚣张不然适得其反的。

本文中的分页基于Mysql实现,使用limit关键字。Oracle中没有limit,使用的是三层嵌套。关键是理解分页的实现,原理都是一样的

不使用任何框架,采用JSP+servlet实现

先介绍一下Mysql中Limit关键字

LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。

如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。

初始记录行的偏移量是 0(而不是 1):

mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15

为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:

mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.

如果只给定一个参数,它表示返回最大的记录行数目:

mysql> SELECT * FROM table LIMIT 5; //检索前 5 个记录行

换句话说,LIMIT n 等价于 LIMIT 0,n。

总结:查询语句应该为(最关键的优两个参数,每页记录数和当前页)

SELECT * FROM 表 LIMIT (当前页-1)*每页显示记录数,每页显示的记录数

原理分析图如下:(核心是分页的JavaBean设计)

689535.html

52ac5dda6611444e0c474804c1cc1d0a.png

实现流程

0.      环境准备

a)引入jar文件及引入配置文件

i.             数据库驱动包

ii.             C3P0连接池jar文件 及 配置文件

iii.             DbUtis组件:    QueryRunner qr = new QueryRuner(dataSouce);

qr.update(sql);

b)        公用类: JdbcUtils.java

1.      先设计:PageBean.java

2.      Dao接口设计/实现:   2个方法

3.      Service/servlet

4.      JSP

代码实现:

1.C3P0配置文件 c3p0-config.xml(放在src目录下)

jdbc:mysql://localhost:3306/jdbc_demo

com.mysql.jdbc.Driver

root

root

3

6

1000

jdbc:mysql://localhost:3306/jdbc_demo

com.mysql.jdbc.Driver

root

root

3

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值