先看效果图:

分页参数类:

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实现分页功能相关推荐

  1. Vue+iView table分页勾选记忆功能

    iView table分页勾选记忆功能 一,需求. a,需求分析: 第一页勾选后,再点分页,勾选其它页数据,可以记住所有勾选的数据,然后可以回显所选数据到页面上,并且跳转页面仍可显示. b,现有功能: ...

  2. 创建vue+iview项目实现分页增删改查功能

    iview+vue实现分页增删改查功能 一. 后台代码 二.前端工具是webstorm,直接上测试相应js接口 三.相应的页面 四.效果展示 上一片文章总结了下如何创建一个vue项目,前端框架使用iv ...

  3. element ui +mybatisPlus分页插件实现分页功能

    elementui pagination插件 当然这里的依赖部分就需要去创库ctrl+v了 <!--分页部分 pagination插件 @current-change="handlep ...

  4. php分页3 1,经典php分页代码与分页原理(1/3)

    经典php教程分页代码与分页原理 1.前言 分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一.对于web编程的老手来说,编写这种代码实在是和呼吸一样自然,但是对于初 ...

  5. Vue3 element-ui实现Pagination分页组件--封装分页

    什么是Pagination分页组件? 在 B 端的 web 开发中,分页组件或者叫分页器,是较为常用的控件之一,通常配合表格或列表,实现数据量大的情况下,分页拆解数据的功能. 1.scrollTo和滚 ...

  6. WIndows内核学习笔记:分页机制——PAE分页模式

    目录 前言 Chapter 4 Paging 4.1 分页模式和控制位 4.1.1 四种分页模式 4.1.2 启用和切换分页模式 4.1.3 分页属性控制 4.1.4 Enumeration of P ...

  7. yii2 分页ajax,yii2的分页和ajax分页

    要想使用Yii分页类 第一步:在控制器层加载分页类 use yii\data\Pagination; 第二步: 使用model层查询数据,并用分分页,限制每页的显示条数 $data = User::f ...

  8. 前端Vue+ElementUI的Pagination分页组件实现分页展示 后端Spring Boot +Mybatis Plus实现分页接口

    前端Vue+ElementUI的Pagination分页组件实现分页展示 & 后端Spring Boot +Mybatis Plus实现分页接口 很久没有更新博客了,主要原因是博主一直在补充自 ...

  9. jquery php 分页插件,jQuery 分页插件代码

    jQuery 分页插件代码 js代码 var newlist = new Vue({ el: '#app', data: { current_page: 1, //当前页 pages: 50, //总 ...

最新文章

  1. 在Ubuntu 14.04 64bit上进行md5加密编程
  2. MasterPage技术
  3. 物联网通信技术最全科普!你一定要了解的NB-IoT
  4. Ubuntu18.04 + CUDA10.0 + tensorflow-gpu 安装过程
  5. webapp开发时问题的总结1
  6. 平均聚类系数_聚类方法排除CPU用量误报警
  7. python爬虫破解大众点评的字体加密
  8. 校友全剧透CMU :ME + 转CS + 其他主要项
  9. 常见概率抽样方法及其适用场景总结
  10. mysql 错误 1548_mysql报错1548-Cannot load from mysql.proc. The table is probably corrupted
  11. 整合NGFW和威胁分析后,防火墙这是要上天?
  12. #榜样的力量#工业富联富集云防疫 App丨数据猿新冠战“疫”公益策划
  13. android 从服务端获取的图片怎么适配不同分屏幕的手机,移动端的适配|切图|标注...
  14. 洛谷P3647 [APIO2014] 连珠线 题解
  15. Termios 函数说明
  16. 阿里云轻量服务器使用一年使用体验(个人心得,仅供参考)
  17. win10 ODBC数据源32位没有Microsoft Access Driver(*.mdb,*accdb)
  18. 往事如烟 - 42岁退休的小帅
  19. 【PTA】解密英文藏头诗
  20. 高德地图点击获取经纬度并标记

热门文章

  1. 旭辉集团签约帆软软件,打造地产行业数字化转型新标杆
  2. 是未来的风口还是无声的战争,中国的saas平台究竟能不能做起来?
  3. 极目眺望的tiantianguandan
  4. 盖茨每一秒能赚多少钱,他现在最担心的是什么?
  5. 删除目录及目录下所有文件与子目录
  6. 年薪50W不是梦,100天掌握BAT前端中高级工程师必备技能
  7. 计算机文档用什么翻译,Word文档翻译在哪里(适于Word2010-Word2016)?
  8. 旋转校正原理_「牛车实验室」四轮定位和动平衡如何选择?趣谈两种项目的原理和区别...
  9. delphi控件切图界面闪烁_一份最详尽全面的UI界面切图命名规范
  10. python 西门子交换机_python读取交换机