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. gitlab 502 报错

    这里从网上查到文章,我这里看了一下我这里是unicorn的问题 说一下情况:这里我们的一个前端修改了大量的打包,并进行了打包.然后提交merge request  分支到master,结果看到页面50 ...

  2. 开发第一个flutter程序 hello world

    上一篇咱们配置了flutter的基本环境之后,那么本篇就来讲一下如何开发第一个小应用hello world 双击打开 android studio 选择plugins 找到 fultter 并且下载安 ...

  3. Fluent动网格【7】:网格节点运动

    在动网格中,对于那些既包含了运动也包含了变形的区域,可以通过UDF来指定区域中每一个节点的位置.这给了用户最大的自由度来指定网格的运动.在其他的动网格技术中(如重叠网格)则很难做到这一点.定义网格节点 ...

  4. AtomicLong.lazySet 是如何工作的?

    原文:http://www.quora.com/Java-programming-language/How-does-AtomicLong-lazySet-work Jackson Davis说:为一 ...

  5. 短信文本查找之 MATCH 与 LIKE

    最近发现原生短信应用的搜索功能的搜索结果十分不准确,所以就开始追踪代码: 关于android searchview的使用这里就不描述了,简单说一下,android的searchVIew是支持autoc ...

  6. qt在GUI显示时,将调试信息输出到控制台的设置

    1. 在.pro文件中添加一下设置: CONFIG += console 2. 项目的[构建和运行]中,需要勾选[Run in terminal]:

  7. Android5.0通知变化浅析

    目前在Android中通知的使用还是很常见的,为了做版本兼容,常用兼容包NotificationCompat.Builder和 Notification.Builder. NotificationCo ...

  8. rqalpha探究 2 接入mod

    程序的目的是尽可能用mod扩展功能,所以接下来需要接入mod模块

  9. table给tbody设置滚动条

    table结构例子: <table class="layui-table"> <thead> <tr> <th> 贷款项目 < ...

  10. Spark学习笔记——数据读取和保存

    spark所支持的文件格式 1.文本文件 在 Spark 中读写文本文件很容易. 当我们将一个文本文件读取为 RDD 时,输入的每一行 都会成为 RDD 的 一个元素. 也可以将多个完整的文本文件一次 ...