实现原理很简单,就是建立一个Page类,里面放当前访问的页数(这个是从客户浏览器传到后台的数据,所以你的分页需要用它来定位记录的条目)和每一页显示的记录行数。然后通过分页计算就可以得出下列数据。
创新互联网站建设服务商,为中小企业提供成都网站建设、网站设计服务,网站设计,网站托管维护等一站式综合服务型公司,专业打造企业形象网站,让您在众多竞争对手中脱颖而出创新互联。
(假定你的页数从1开始)
1、总页数 = 总记录数/每页大小,如果0!=总记录数%每页大小,那么总页数再+1
2、当前页数(从浏览器传递的参数中获得)
3、表记录的起始位置=(当前页数-1)*每页大小
4、总记录数(select count(*) from [表名] [where [条件]],从数据库中查询得到)
5、每页大小,可以固定,也可以从页面传过来
有了这几个参数之后,就用sql语句查出对应的记录就可以了。
mysql数据库用limit 表记录的起始位置,每页大小 语句添加到你的查询语句最后面
sqlserver数据库用top语句和not in 来做
oracle数据库用rownum来做
再给你一段分页对象代码,你自己先读一下
pre t="code" l="java"public class Page {
private long totalCount = 0;// 总记录数
private int pageNumber = 1;// 当前页号,默认显示第一页
private int pageSize = 20; // 每页大小,默认每页20条
private int totalPage = 0;// 总页数,默认为0
private int startRow = 0;// 起始记录行号,默认为从表头开始
/**
* 分页计算方法,由setTotalCount调用
*/
public void pagination() {
// 计算总页数
if (this.totalCount % pageSize == 0)
this.totalPage = new Long(this.totalCount / pageSize).intValue();
else
this.totalPage = new Long(this.totalCount / pageSize).intValue() + 1;
// 排除错误页号
if (this.pageNumber 1)
this.pageNumber = 1;
if (this.pageNumber this.totalPage)
this.pageNumber = this.totalPage;
// 计算起始行号
this.startRow = (this.pageNumber - 1) * this.pageSize;
}
public long getTotalCount() {
return totalCount;
}
public void setTotalCount(long totalCount) {
this.totalCount = totalCount;
this.pagination();
}
public int getPageNumber() {
return pageNumber;
}
public void setPageNumber(int pageNumber) {
this.pageNumber = pageNumber;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getStartRow() {
return startRow;
}
public void setStartRow(int startRow) {
this.startRow = startRow;
}
}
用Free Spire.PDF JAVA版本
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import java.io.*;
public class CountPages{
public static void main(String[] args) {
//创建PdfDocument实例
PdfDocument doc=new PdfDocument();
//加载PDF文件
doc.loadFromFile("test.pdf");
int pageCount = doc.getPages().getCount();
doc.close();
}
}
首先如果我有allcount个,每页为pagesize,且pagesize比1大
先说java整数间的/符号,不光是除法还会进行向0取整的工作,
即正数向比他小的正数取,
负数向比他大的负数取,
比如4.3取整是4,
4.7取整还是4
-4.3取整是-4
-4.7取整是-4
以下分类讨论
(1)(allcount-1)除不尽pagesize,且有余数,比如除完得5.4,经java取整后得5,我减1都除完都比五大,说明原来5页不够,我得给他+1,变成6页与预期一致.
(2)(allcount-1)能除尽pagesize比如除完得5,但我是-1后除的得5,也说明原来5页是不够的,所以我给他结果+1,变成6页,与预期一致.
至此已经涵盖了所有的可能,这个式子均与我们预期的答案相同,命题得证
他之所以用-1是因为当pagesize1的时候你-1以后除得到的整数和不减一会是一样的,
推广的话,如果你保证pagesizen那么你前面把-1换成-n也是可以的
这个式子是精心设计出来的,设计的比较精巧,我们可以证明他是对的,
但能证明不代表我们能发明它
这个式子比较常见,你可以尝试把他这种思想用在别的地方
一些东西需要一定的积累和灵感才能设计出来,所以你若能证明它其实就是理解了,不必再纠结怎么去发明他,或者发明的人是怎么想到的
在mybatis调用分页查询语句之前调用jar和插件配置程序,PageHelper.startPage会返回一个page对象,此对象在查询结果出来后会把总页数给page对象,即可实现分页查询功能,求出总页数。
MyBatis支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs,Plain Ordinary Java Object,普通的Java对象映射成数据库中的记录。
一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。
扩展资料:
MyBatis的特点:
1、简单易学
本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现
2、灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
3、解除sql与程序代码的耦合
通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
参考资料来源:百度百科—MyBatis