jdbc实现分页,需要前端传当前页码
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实现分页,需要前端传当前页码的更多相关文章
- js 页码分页的前端写法
<script type="text/javascript"> var curPage = 1;//当前页码 var total;//总页数 $(function () ...
- vue+element的表格分页和前端搜索
1.前端后台管理会存在很多表格,表格数据过多就需要分页;2.前端交互每次搜索如果都请求服务器会加大服务器的压力,所以在数据量不是很大的情况下可以一次性将数据返回,前端做检索3.下面贴上一个demo & ...
- php-数据库-分页类-上传类
config.ini.php <?php header("content-type:text/html;charset=utf-8"); //项目的根目录 define(&q ...
- 正确的前端传后台json方式
DEMO: var data=JSON.stringify({"page": {"pagenow": 1,"pagesize": 20},& ...
- asp.net MVC 框架中控制器里使用Newtonsoft.Json对前端传过来的字符串进行解析
下面我用一个实例来和大家分享一下我的经验,asp.net MVC 框架中控制器里使用Newtonsoft.Json对前端传过来的字符串进行解析. using Newtonsoft.Json; usin ...
- jdbc 实现分页
jdbc 实现分页,的实现 原理这个就不介绍了.. 总之是用jdbc 的游标移动 package com.sp.person.sql.util; import java.sql.Connection; ...
- @requestbody---接受前端传json对象并绑定javabean
@requestbody---接受前端传json对象并绑定javabean----https://blog.csdn.net/ljxbbss/article/details/74452326 最近代码 ...
- springboot 服务端获取前端传过来的参数7种方式
下面为7种服务端获取前端传过来的参数的方法 1.直接把表单的参数写在Controller相应的方法的形参中,适用于GET 和 POST请求方式 这种方式不会校验请求里是否带参数,即下面的userna ...
- vue+element实现分页--之--前端分页
效果图: 访问的数据量小,一次返回所有数据,再次利用elementUI-Table 和el-pagination组件进行展示,关键点事数据的筛选 官网的完整案例 <div class=" ...
随机推荐
- malloc()參数为0的情况
以下的代码片段输出是什么?为什么? char *ptr; ))==NULL) puts("Got a null pointer"); else puts("Got a v ...
- tensorflow笔记6:tf.nn.dynamic_rnn 和 bidirectional_dynamic_rnn:的输出,output和state,以及如何作为decoder 的输入
一.tf.nn.dynamic_rnn :函数使用和输出 官网:https://www.tensorflow.org/api_docs/python/tf/nn/dynamic_rnn 使用说明: A ...
- jupyter修改根目录
找到jupyter的快捷方式,然后修改目标: 首先在快捷方式上右键单击,选择属性: 然后将目标那里替换自己想要的目录: 网上有的教程说保留%USERPROFILE%,其实这是受系统对路径解析的影响的. ...
- Thrift源码学习二——Server层
Thrift 提供了如图五种模式:TSimpleServer.TNonblockingServer.THsHaServer.TThreadPoolServer.TThreadSelectorServe ...
- CentOS5.x、CentOS6.x 使用NFS及mount实现两台服务器间目录共享
一.环境介绍: 服务器:centos 192.168.1.225 客户端:centos 192.168.1.226 二.安装: NFS的安装配置:centos 5 : portmap:实现RPC(协议 ...
- Spark学习笔记——构建基于Spark的推荐引擎
推荐模型 推荐模型的种类分为: 1.基于内容的过滤:基于内容的过滤利用物品的内容或是属性信息以及某些相似度定义,来求出与该物品类似的物品. 2.协同过滤:协同过滤是一种借助众包智慧的途径.它利用大量已 ...
- ios开发之--NSURL的用法
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com/search?id=1"]; NSLog(@"schem ...
- Automatic Summarization of Bug Reports
CONTENT: example : KDE bug report: https://bugs.kde.org/show_bug.cgi?id=188311 (其中还有很多comments没显示) ...
- vc写的dll被mingw的g++编译引用
dll.cpp,用vc2017编译 #include <iostream>#include <windows.h> extern "C" __declspe ...
- linux Email 体系
大致了解了DNS与邮件服务器之间的关系后,接下来我们介绍邮件到底是如何传送到目的邮件主机的.下面我们分成“寄信”与“收信”两个主要的邮件服务器使用方式进行介绍.先说明关于“寄信”的部分.通常我们都是使 ...