1.封装一个公共实体类用于返回:实体数据,当前页,总页数,总条数,每页多少条

public class PageInfo<T> {

    //一页显示的记录数
private int numPerPage=10;
//记录总数
private int totalRows;
//总页数
private int totalPages;
//当前页码
private int currentPage; private List<T> list; // 总数统计
private T sumObj; public T getSumObj() {
return sumObj;
}
public void setSumObj(T sumObj) {
this.sumObj = sumObj;
}
public PageInfo() {
this.totalRows = 0;
this.totalPages = 0;
this.currentPage = 1;
}
public PageInfo(Integer currentPage, int totalRows) {
if(currentPage==null)currentPage=1;
setCurrentPage(currentPage);
this.totalRows = totalRows;
}
public PageInfo(Integer currentPage){
if(currentPage==null)currentPage=1;
setCurrentPage(currentPage);
}
public int getCurrentPage() {
return currentPage;
} public void setCurrentPage(int currentPage) {
this.currentPage = currentPage <= 0 ? 1 : currentPage;
} public int getNumPerPage() {
return numPerPage;
} public void setNumPerPage(int numPerPage) {
this.numPerPage = numPerPage;
} public int getTotalPages() {
if (this.totalPages == 0) {
this.totalPages = this.totalRows / this.numPerPage + (this.totalRows % this.numPerPage == 0 ? 0 : 1);
}
return this.totalPages;
} public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
}
public int getTotalRows() {
return totalRows;
}
public int getStartIndex() {
return (currentPage - 1) * numPerPage;
} public void setTotalRows(int totalRows) {
this.totalRows = totalRows;
} public void setList(List<T> list) {
this.list = list;
} public List<T> getList() {
return list;
} }

  2.思路:

1)先计算总条数,每页条数可以固定,当前页数,总页数:

select count(*)from (自己写的查询语句) a;//计算出总条数,然后通过总条数和每页条数计算出总页数,当前页是前端传递过来的。将计算出来的这些数据放入PageInfo<T>的页数相关字段中

2)获取对应页数的T(实体类):

通过mysql的limit字段:

开始页数:

public int getStartIndex() {
return (currentPage - 1) * numPerPage;
}

条数:取每页条数。

3)将T封装到PageInfo<T>的private List<T> list中;

4)返回PageInfo<T>

3.具体方法:

public <T> PageInfo<T> getObjectsByPage(Class<T> cls,String sql,RowMapper<T> rowMapper,PageInfo<T> pageInfo,Object[] objects){
if(null==pageInfo){
pageInfo=new PageInfo<T>();
}
if(pageInfo.getTotalRows()<=0){
//总条数
Integer total= this.getCount(sql, objects);
pageInfo.setSumObj(sumObj);
//Integer total=getObjectCount(cls,sql, objects);
pageInfo.setTotalRows(total);//总条数:sum子查询出来的
//总页数
Integer totalPages= (int) Math.ceil((double)total/(double)pageInfo.getNumPerPage());
pageInfo.setTotalPages(totalPages);
}
List<T> list=getObjectList(cls,sql, objects, pageInfo, rowMapper);
pageInfo.setList(list);
return pageInfo;
} private Integer getCount(String sql,Object... objects){
StringBuffer count=new StringBuffer("select ");
String sqlStr=sql.toLowerCase(); count.append(" count(*) id "); count.append(" from (");
count.append(sqlStr);
count.append(") temp_for_page_count"); return getAccess(null).findInteger(count.toString(), objects);
} private <T> List<T> getObjectList(Class<T> cls,String sql,Object[] objects,PageInfo<T> pageInfo,RowMapper<T> rowMapper){
StringBuffer limit=new StringBuffer(sql);
limit.append(" limit ").append(pageInfo.getStartIndex()).append(",").append(pageInfo.getNumPerPage());
List<T> list=getAccess(cls).find(limit.toString(),rowMapper,objects);
return list; }

jdbc查询语句:

 public <T> List<T> find(String sql, RowMapper<T> rowMapper, Object... params) {
StopWatch watch = new StopWatch();
try {
return this.jdbcTemplate.query(sql, params, rowMapper);
} finally {
this.logger.debug(FIND_SQL_LOG, new Object[] { sql, params, Long.valueOf(watch.elapsedTime()) });
if (watch.elapsedTime() > SLOW_SQL_TIME_LENGTH)
this.logger.warn(SLOW_SQL_LOG, new Object[] { sql, Long.valueOf(watch.elapsedTime()) });
}
}

jdbc实现分页,需要前端传当前页码的更多相关文章

  1. js 页码分页的前端写法

    <script type="text/javascript"> var curPage = 1;//当前页码 var total;//总页数 $(function () ...

  2. vue+element的表格分页和前端搜索

    1.前端后台管理会存在很多表格,表格数据过多就需要分页;2.前端交互每次搜索如果都请求服务器会加大服务器的压力,所以在数据量不是很大的情况下可以一次性将数据返回,前端做检索3.下面贴上一个demo & ...

  3. php-数据库-分页类-上传类

    config.ini.php <?php header("content-type:text/html;charset=utf-8"); //项目的根目录 define(&q ...

  4. 正确的前端传后台json方式

    DEMO: var data=JSON.stringify({"page": {"pagenow": 1,"pagesize": 20},& ...

  5. asp.net MVC 框架中控制器里使用Newtonsoft.Json对前端传过来的字符串进行解析

    下面我用一个实例来和大家分享一下我的经验,asp.net MVC 框架中控制器里使用Newtonsoft.Json对前端传过来的字符串进行解析. using Newtonsoft.Json; usin ...

  6. jdbc 实现分页

    jdbc 实现分页,的实现 原理这个就不介绍了.. 总之是用jdbc 的游标移动 package com.sp.person.sql.util; import java.sql.Connection; ...

  7. @requestbody---接受前端传json对象并绑定javabean

    @requestbody---接受前端传json对象并绑定javabean----https://blog.csdn.net/ljxbbss/article/details/74452326 最近代码 ...

  8. springboot 服务端获取前端传过来的参数7种方式

    下面为7种服务端获取前端传过来的参数的方法  1.直接把表单的参数写在Controller相应的方法的形参中,适用于GET 和 POST请求方式 这种方式不会校验请求里是否带参数,即下面的userna ...

  9. vue+element实现分页--之--前端分页

    效果图: 访问的数据量小,一次返回所有数据,再次利用elementUI-Table 和el-pagination组件进行展示,关键点事数据的筛选 官网的完整案例 <div class=" ...

随机推荐

  1. c链表之oc AutoReleasePool

    直接贴 原文吧: http://blog.sunnyxx.com/2014/10/15/behind-autorelease/

  2. [转]关于ios 推送功能的终极解决

    刚刚做了一个使用推送功能的应用 遇到了一些问题整的很郁闷 搞了两天总算是弄明白了 特此分享给大家 本帖 主要是针对产品发布版本的一些问题 综合了网上一些资料根据自己实践写的 不过测试也可以看看 首先要 ...

  3. AutoMapper,对象映射的简单使用

    using AutoMapper; using AutoMapper.Configuration; using System; using System.Collections.Generic; us ...

  4. Android 录音和播放

    今天工作上需要做一个一边录音一边播放的功能,大致原因是有一个外部设备输入音频到我们机器,然后我们机器需要马上把音频播放出来.所以了解了一些有关录音和播放的知识.接到这个任务的第一反应就是看看Andro ...

  5. 还原Stack操作

    下午看到一题.给定两个int[]数组,int[] org和int[] res, 分别代表一串数字,和这串数字经过stack的push 和 pop操作之后的数字,让返回一个String, String里 ...

  6. Java知多少(64)线程死锁

    需要避免的与多任务处理有关的特殊错误类型是死锁(deadlock).死锁发生在当两个线程对一对同步对象有循环依赖关系时.例如,假定一个线程进入了对象X的管程而另一个线程进入了对象Y的管程.如果X的线程 ...

  7. (笔记)Linux内核学习(二)之进程

    一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源. 线程是进程中活动的对象,每个线程都拥有独立的程序计数器.进程栈和一组进程寄存器. 内核调度的对象是线程而不是进程.对 ...

  8. Nginx 基本命令

    基础命令 1.启动 直接点击Nginx目录下的nginx.exe 或者 cmd运行start nginx 2.关闭 nginx -s stop 或者 nginx -s quit stop表示立即停止n ...

  9. 关于启动过程及log

    1.tomcat的启动过程及log 2.webapp的启动过程及log 3.spring的启动过程及log 4.springmvc的启动过程及log 5.web.xml的启动过程及log

  10. [Laravel] 14 - REST API: Laravel from scratch

    前言 一.基础 Ref: Build a REST API with Laravel API resources Goto: [Node.js] 08 - Web Server and REST AP ...