jdbctemplate分页mysql_jdbcTemplate实现分页功能
先看效果图:
分页参数类:
package com.yadou.model;
/**
* 分页参数类
* Created by lv on 16-5-12.
*/
public class PageParam {
/**
* 起始页码
*/
private int page = 1;
/**
* 每页显示条数
*/
private int limit;
/**
* 默认为10条
*/
public static final int PAGE_SIZE = 10;
/**
* 排序字段
*/
private String sort;
/**
* asc or desc
*/
private String dir;
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public String getSort() {
return sort;
}
public void setSort(String sort) {
this.sort = sort;
}
public String getDir() {
return dir;
}
public void setDir(String dir) {
this.dir = dir;
}
public int getLimit() {
return limit;
}
public void setLimit(int limit) {
this.limit = limit;
}
}
分页工具类:
package com.yadou.util;
import com.yadou.model.PageParam;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import java.util.List;
public class Pagination extends JdbcDaoSupport {
private static final Logger LOGGER = LogManager.getLogger(Pagination.class);
//一页显示的记录数
private int pageSize;
//记录总数
private int totalRows;
//总页数
private int totalPages;
//当前页码
private int currentPage;
//起始行数
private int startIndex;
//结束行数
private int lastIndex;
//结果集存放List
private List resultList;
//JdbcTemplate jTemplate
private JdbcTemplate jTemplate;
/**
* 分页构造函数
*
* @param sql 根据传入的sql语句得到一些基本分页信息
* @param params 参数列表
* @param pageParam 分页参数对象
* @param jTemplate JdbcTemplate实例
*/
public Pagination(String sql, Object[] params, PageParam pageParam, JdbcTemplate jTemplate) {
if (jTemplate == null) {
throw new IllegalArgumentException("com.deity.ranking.util.Pagination.jTemplate is null,please initial it first. ");
} else if (sql == null || sql.equals("")) {
throw new IllegalArgumentException("com.deity.ranking.util.Pagination.sql is empty,please initial it first. ");
}
//设置每页显示记录数
setPageSize(pageParam.getLimit());
//设置要显示的页数
setCurrentPage(pageParam.getPage());
//计算总记录数
StringBuffer totalSQL = new StringBuffer(" SELECT count(*) FROM ( ");
totalSQL.append(sql);
totalSQL.append(" ) totalTable ");
//给JdbcTemplate赋值
setJdbcTemplate(jTemplate);
//总记录数
setTotalRows(getJdbcTemplate().queryForObject(totalSQL.toString(), params, Integer.class));
//计算总页数
setTotalPages();
//计算起始行数
setStartIndex();
//计算结束行数
setLastIndex();
//装入结果集
setResultList(getJdbcTemplate().queryForList(getMySQLPageSQL(new StringBuilder(sql), pageParam), params));
}
/**
* 构造MySQL数据分页SQL
*
* @param queryString
* @return
*/
public String getMySQLPageSQL(StringBuilder queryString, PageParam pageParam) {
String resultSql = null;
if (pageParam != null && pageParam.getSort() != null && pageParam.getDir() != null) {
queryString.append(" order by ").append(pageParam.getSort()).append(" ").append(pageParam.getDir());
}
if (0 != pageSize) {
resultSql = queryString.append(" limit ").append(startIndex).append(",").append(pageSize).toString();
} else {
resultSql = queryString.toString();
}
LOGGER.info("page sql:{}", resultSql);
return resultSql;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
//如果当前页码<1,则默认加载第一页数据
if (currentPage < 0) {
this.currentPage = 1;
} else {
this.currentPage = currentPage;
}
}
public List getResultList() {
return resultList;
}
public void setResultList(List resultList) {
this.resultList = resultList;
}
public int getTotalPages() {
return totalPages;
}
//计算总页数
public void setTotalPages() {
if (pageSize == 0) {
totalPages = 0;
} else {
if (totalRows % pageSize == 0) {
this.totalPages = totalRows / pageSize;
} else {
this.totalPages = (totalRows / pageSize) + 1;
}
}
}
public int getTotalRows() {
return totalRows;
}
public void setTotalRows(int totalRows) {
this.totalRows = totalRows;
}
public int getStartIndex() {
return startIndex;
}
public void setStartIndex() {
//如果总页数>当前页,则默认加载最后一页
if (currentPage > totalPages) {
currentPage = totalPages;
}
this.startIndex = (currentPage - 1) * pageSize;
}
public int getLastIndex() {
return lastIndex;
}
public JdbcTemplate getJTemplate() {
return jTemplate;
}
public void setJTemplate(JdbcTemplate template) {
jTemplate = template;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
//计算结束时候的索引
public void setLastIndex() {
LOGGER.debug("totalRows={}", totalRows);///
LOGGER.debug("pageSize={}", pageSize);///
if (pageSize != 0) {
if (totalRows < pageSize) {
this.lastIndex = totalRows;
} else if ((totalRows % pageSize == 0) || (totalRows % pageSize != 0 && currentPage < totalPages)) {
this.lastIndex = currentPage * pageSize;
} else if (totalRows % pageSize != 0 && currentPage == totalPages) {//最后一页
this.lastIndex = totalRows;
}
}
}
}
程序中使用:
public Pagination find(BGoodsVO bGoodsVO, PageParam pageParam) {
List params = new ArrayList<>();
StringBuilder sqlBuilder = new StringBuilder("SELECT\n" +
"g.*, s.shop_name\n" +
"FROM\n" +
"b_goods g,\n" +
"b_shop s\n" +
"WHERE\n" +
"g.shopid = s.ID\n");
if (bGoodsVO != null) {
if (bGoodsVO.getState() != null) {
//状态
sqlBuilder.append(" and g.state = ?");
params.add(bGoodsVO.getState());
}
}
return new Pagination(sqlBuilder.toString(), params.toArray(), pageParam, super.getJdbcTemplate());
}
jdbctemplate分页mysql_jdbcTemplate实现分页功能相关推荐
- Vue+iView table分页勾选记忆功能
iView table分页勾选记忆功能 一,需求. a,需求分析: 第一页勾选后,再点分页,勾选其它页数据,可以记住所有勾选的数据,然后可以回显所选数据到页面上,并且跳转页面仍可显示. b,现有功能: ...
- 创建vue+iview项目实现分页增删改查功能
iview+vue实现分页增删改查功能 一. 后台代码 二.前端工具是webstorm,直接上测试相应js接口 三.相应的页面 四.效果展示 上一片文章总结了下如何创建一个vue项目,前端框架使用iv ...
- element ui +mybatisPlus分页插件实现分页功能
elementui pagination插件 当然这里的依赖部分就需要去创库ctrl+v了 <!--分页部分 pagination插件 @current-change="handlep ...
- php分页3 1,经典php分页代码与分页原理(1/3)
经典php教程分页代码与分页原理 1.前言 分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一.对于web编程的老手来说,编写这种代码实在是和呼吸一样自然,但是对于初 ...
- Vue3 element-ui实现Pagination分页组件--封装分页
什么是Pagination分页组件? 在 B 端的 web 开发中,分页组件或者叫分页器,是较为常用的控件之一,通常配合表格或列表,实现数据量大的情况下,分页拆解数据的功能. 1.scrollTo和滚 ...
- WIndows内核学习笔记:分页机制——PAE分页模式
目录 前言 Chapter 4 Paging 4.1 分页模式和控制位 4.1.1 四种分页模式 4.1.2 启用和切换分页模式 4.1.3 分页属性控制 4.1.4 Enumeration of P ...
- yii2 分页ajax,yii2的分页和ajax分页
要想使用Yii分页类 第一步:在控制器层加载分页类 use yii\data\Pagination; 第二步: 使用model层查询数据,并用分分页,限制每页的显示条数 $data = User::f ...
- 前端Vue+ElementUI的Pagination分页组件实现分页展示 后端Spring Boot +Mybatis Plus实现分页接口
前端Vue+ElementUI的Pagination分页组件实现分页展示 & 后端Spring Boot +Mybatis Plus实现分页接口 很久没有更新博客了,主要原因是博主一直在补充自 ...
- jquery php 分页插件,jQuery 分页插件代码
jQuery 分页插件代码 js代码 var newlist = new Vue({ el: '#app', data: { current_page: 1, //当前页 pages: 50, //总 ...
最新文章
- 在Ubuntu 14.04 64bit上进行md5加密编程
- MasterPage技术
- 物联网通信技术最全科普!你一定要了解的NB-IoT
- Ubuntu18.04 + CUDA10.0 + tensorflow-gpu 安装过程
- webapp开发时问题的总结1
- 平均聚类系数_聚类方法排除CPU用量误报警
- python爬虫破解大众点评的字体加密
- 校友全剧透CMU :ME + 转CS + 其他主要项
- 常见概率抽样方法及其适用场景总结
- mysql 错误 1548_mysql报错1548-Cannot load from mysql.proc. The table is probably corrupted
- 整合NGFW和威胁分析后,防火墙这是要上天?
- #榜样的力量#工业富联富集云防疫 App丨数据猿新冠战“疫”公益策划
- android 从服务端获取的图片怎么适配不同分屏幕的手机,移动端的适配|切图|标注...
- 洛谷P3647 [APIO2014] 连珠线 题解
- Termios 函数说明
- 阿里云轻量服务器使用一年使用体验(个人心得,仅供参考)
- win10 ODBC数据源32位没有Microsoft Access Driver(*.mdb,*accdb)
- 往事如烟 - 42岁退休的小帅
- 【PTA】解密英文藏头诗
- 高德地图点击获取经纬度并标记
热门文章
- 旭辉集团签约帆软软件,打造地产行业数字化转型新标杆
- 是未来的风口还是无声的战争,中国的saas平台究竟能不能做起来?
- 极目眺望的tiantianguandan
- 盖茨每一秒能赚多少钱,他现在最担心的是什么?
- 删除目录及目录下所有文件与子目录
- 年薪50W不是梦,100天掌握BAT前端中高级工程师必备技能
- 计算机文档用什么翻译,Word文档翻译在哪里(适于Word2010-Word2016)?
- 旋转校正原理_「牛车实验室」四轮定位和动平衡如何选择?趣谈两种项目的原理和区别...
- delphi控件切图界面闪烁_一份最详尽全面的UI界面切图命名规范
- python 西门子交换机_python读取交换机