前言:
我们在写项目的时候,往往有一些项目的信息展示。而展示的数据量往往是很大的,这时候,加入一个分页的功能往往是最理想的选择。
先简单描述一下功能:
根据你的数据量和指定的页面展示数据条数,进行查询不同的数据,通过“首页”、“上页”、“下页”、“尾页”按钮进行跳转。
首先展示一下效果,如下图:
如何用纯代码实现上面的功能呢?
一共主要有以下几步:
1、创建分页对象
2、在后台查询时使用数据库行号
3、在前端展示时,将分页对象中处理好的分页属性链接加入到按钮中
······································································································································
- 首先呢,就是创建一个分页对象:
public class PageModel {
private long total_count;//数据总条数
private int page_size=10;//每页显示条数
private int page_num;//总页数
private int page_now=1;//当前页数
private String page_first;//页面展示首页信息
private String page_pre;//页面展示上一页信息
private String page_next;//页面展示下一页信息
private String page_last;//页面展示尾页信息
private int first=1;//首页页数
private int pre=0;//上一页页数
private int next=0;//下一页页数
private int last;//尾页页数
public long getTotal_count() {
return total_count;
}
public void setTotal_count(long totalCount) {
total_count = totalCount;
}
public int getPage_size() {
return page_size;
}
public void setPage_size(int pageSize) {
page_size = pageSize;
}
public int getPage_num() {
return page_num;
}
public void setPage_num(int pageNum) {
page_num = pageNum;
}
public int getPage_now() {
return page_now;
}
public void setPage_now(int pageNow) {
page_now = pageNow;
}
public String getPage_first() {
return page_first;
}
public void setPage_first(String pageFirst) {
page_first = pageFirst;
}
public String getPage_pre() {
return page_pre;
}
public void setPage_pre(String pagePre) {
page_pre = pagePre;
}
public String getPage_next() {
return page_next;
}
public void setPage_next(String pageNext) {
page_next = pageNext;
}
public String getPage_last() {
return page_last;
}
public void setPage_last(String pageLast) {
page_last = pageLast;
}
public int getFirst() {
return first;
}
public void setFirst(int first) {
this.first = first;
}
public int getPre() {
return pre;
}
public void setPre(int pre) {
this.pre = pre;
}
public int getNext() {
return next;
}
public void setNext(int next) {
this.next = next;
}
public int getLast() {
return last;
}
public void setLast(int last) {
this.last = last;
}
//action 控制器方法的请求地址
public void setPage(String action,int total_count,int page_now,int page_size,String params){
this.page_size=page_size;
this.page_now=page_now;
this.page_num=(int) (total_count/this.page_size);
if(total_count%this.page_size!=0){
this.page_num+=1;
}
last=page_num;
if(page_now>1){
pre=page_now-1;
}else{
pre=1;
}
if(page_now<page_num){
next=page_now+1;
}else{
next=page_now;
}
page_first=action+"?page_now="+first+params;
page_pre=action+"?page_now="+pre+params;
page_next=action+"?page_now="+next+params;
page_last=action+"?page_now="+last+params;
}
}
- 紧接着就是我们的这个分页对象的用法咯:
public void select(HttpServletRequest request) {
// 获取当前页数
String page_now = request.getParameter("page_now");
if (page_now == null) {
page_now = "1";
}
// 字符串转换成数字
int pagenow = Integer.parseInt(page_now);
// 获取数据总条数
// 注意:mapper层需要定义getCount方法
int count = mapper.getCount();
// 创建分页类对象
PageModel page = new PageModel();
// 设置分页信息----要修改的信息
// 注意:设定setPage参数
page.setPage("goods_genre/select", count, pagenow, 6,"");
// 调取当前分页的开始条数
int start = (page.getPage_now() - 1) * page.getPage_size();
// 每页查询数据条数
int end = page.getPage_size() * page.getPage_now();
// 将开始条数和每页展示条数存放于map对象
System.out.println(start + " " + end);
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("start", start);
map.put("end", end);
List<?> list = mapper.select(map);
request.setAttribute("goods_genre", list);
request.setAttribute("page", page);
}
这里呢,我们点击按钮后,我们拿到当前的页数以后,根据数据总条数和规定的一页显示数据量来生成我们的查询条件,查询之后将我们的分页对象和查询到的信息传送到页面即可。
- 这里呢就涉及到页面展示以及我们的数据库查询两端的操作了,如下:
<select id="select" parameterType="Map" resultType="Goods_genreEntity">
select * from
(select ROWNUM num,m.* from goods_genre m) t
where num>#{start} and num <= #{end}
</select>
oracle数据库自带行号属性,所以这里我可以直接使用ROWNUM关键字进行查询,使用行号分割数据。
- 页面端展示:
<div class="paging">
<a href="<%=basePath %>${page.page_first }">首页</a>
<a href="<%=basePath %>${page.page_pre }">上一页</a>
<a href="<%=basePath %>${page.page_next }">下一页</a>
<a href="<%=basePath %>${page.page_last }">尾页</a>
</div>
临近毕业,感慨万分。最后,感谢我的老师-刘爸!