JAVA MyBybatis分页
java:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Properties; import org.apache.ibatis.executor.parameter.ParameterHandler;
import org.apache.ibatis.executor.statement.StatementHandler;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.plugin.Intercepts;
import org.apache.ibatis.plugin.Invocation;
import org.apache.ibatis.plugin.Plugin;
import org.apache.ibatis.plugin.Signature;
import org.apache.ibatis.reflection.DefaultReflectorFactory;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.SystemMetaObject;
import org.imooc.bean.BaseBean;
import org.imooc.bean.Page; @Intercepts({@Signature(type=StatementHandler.class,method="prepare",args={Connection.class})})
public class PageInterceptor implements Interceptor{ public Object intercept(Invocation arg0) throws Throwable {
StatementHandler statementHandler = (StatementHandler)arg0.getTarget();
MetaObject metaObject = MetaObject.forObject(statementHandler, SystemMetaObject.DEFAULT_OBJECT_FACTORY, SystemMetaObject.DEFAULT_OBJECT_WRAPPER_FACTORY,new DefaultReflectorFactory());
MappedStatement mappedStatement = (MappedStatement)metaObject.getValue("delegate.mappedStatement");
String id = mappedStatement.getId();
if(id.endsWith("ByPage")) {
BoundSql boundSql = statementHandler.getBoundSql();
String sql = boundSql.getSql();
String countSql = "select count(*) from(" + sql + ")t";
Connection conn = (Connection)arg0.getArgs()[0];
PreparedStatement statement = conn.prepareStatement(countSql);
ParameterHandler parameterHandler = (ParameterHandler)metaObject.getValue("delegate.parameterHandler");
parameterHandler.setParameters(statement);
ResultSet rs = statement.executeQuery();
BaseBean bean = (BaseBean)boundSql.getParameterObject();
Page page = bean.getPage();
if(rs.next()) {
page.setTotalNumber(rs.getInt(1));
}
String pageSql = sql + " limit " + (page.getCurrentPage() - 1) * page.getPageNumber() + "," + page.getPageNumber();
metaObject.setValue("delegate.boundSql.sql", pageSql);
}
return arg0.proceed();
} public Object plugin(Object arg0) {
return Plugin.wrap(arg0, this);
} public void setProperties(Properties arg0) { }
}
/**
* 分页对象
*/
public class Page { // 总条数
private int totalNumber;
// 当前页数
private int currentPage;
// 总页数
private int totalPage;
// 每页显示条数
private int pageNumber; public Page() {
this.currentPage = 1;
this.pageNumber = 5;
} public int getTotalNumber() {
return totalNumber;
} private void count() {
this.totalPage = this.totalNumber / this.pageNumber;
if(this.totalNumber % this.pageNumber > 0) {
this.totalPage++;
}
if(this.totalPage <= 0) {
this.totalPage = 1;
}
if(this.currentPage > this.totalPage) {
this.currentPage = this.totalPage;
}
if(this.currentPage <= 0) {
this.currentPage = 1;
}
} public void setTotalNumber(int totalNumber) {
this.totalNumber = totalNumber;
this.count();
} public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getTotalPage() { return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getPageNumber() {
return pageNumber;
}
public void setPageNumber(int pageNumber) {
this.pageNumber = pageNumber;
}
}
public class BaseBean {
private Page page;
public BaseBean() {
this.page = new Page();
}
public Page getPage() {
return page;
}
public void setPage(Page page) {
this.page = page;
}
}
jsp页面:
<%@ tag language="java" pageEncoding="UTF-8" %>
<%@ attribute type="org.imooc.bean.Page" name="page" required="true" %>
<%@ attribute type="String" name="jsMethodName" required="true" %> <script type="text/javascript">
function transCurrentPage(currentPage) {
var rule = /^[0-9]*[1-9][0-9]*$/;
if(!rule.test(currentPage)) {
currentPage = 1;
}
eval("${jsMethodName}(currentPage)");
}
</script> <div class="page fix">
<a href="javascript:transCurrentPage('1');" class="first">首页</a>
<a href="javascript:transCurrentPage('${page.currentPage - 1}');" class="pre">上一页</a>
当前第<span>${page.currentPage}/${page.totalPage}</span>页
<a href="javascript:transCurrentPage('${page.currentPage + 1}');" class="next">下一页</a>
<a href="javascript:transCurrentPage('${page.totalPage}');" class="last">末页</a>
跳至 <input id="currentPageText" value="1" class="allInput w28" type="text"/> 页
<a href="javascript:transCurrentPage($('#currentPageText').val());" class="go">GO</a>
</div>
调用:
<%@ taglib prefix="t" tagdir="/WEB-INF/tags"%>
<!-- 分页 -->
<t:page jsMethodName="search" page="${searchParam.page}"></t:page>

JAVA MyBybatis分页的更多相关文章
- Java 动态分页类
动态分页类: Cls_page.java package pagination; public class Cls_page { private int nums;// 总条目数 private i ...
- 【java】分页查询实体类
package com.dmsd.itoo.tool.pageModel; import java.io.Serializable; import java.util.HashMap; import ...
- Java实现分页数据获取CachedRowSet
步骤 1.加载驱动 2.连接数据库 3.创建ResultSet 4.创建CacheRowSet 5.设置并获取分页数据 6.执行查询,展示数据 package ch13; import javax.s ...
- java web分页查询初试
ssh2分页查询初试,放着记录学习一下. entity:student.java: package com.zte.entity; /** * 数据持久化,跟数据库的的相应的表的字段是对应的. * * ...
- java Page分页显示
//entity层实体类 import java.util.List; //分页展示 //相关属性:当前页,页大小(每页显示的条数),总页数,总条数,数据 //select * from t_user ...
- java超强分页标签演示
最近在做一个项目,用到了一个分页,于是动手写了个分页标签,先将代码贴出来,供大家交流,写的不好,请见谅!. 以下是java标签类,继承自SimpleTagSupport package com.lyn ...
- Java 实现分页功能
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test?allowMultiQueries=true&useUnic ...
- java web 分页实现
分页实现的效果: ///////// /////////////////////////////////////////////////////// /////////////////// ...
- Java自定义分页标签的实现
主要字段含义: 页号 pagaNo页面大小 pageSize总记录条数 recordCount计算本次一共分多少页 myPageSize页号显示开始 start 页号显示结束 end PageTag需 ...
随机推荐
- 微信小程序 movable-view组件应用:可拖动悬浮框_返回首页
1. movable-view组件具体内容可参考官网:微信官方文档 2. demo参考:https://github.com/ChinaFanny/YFWeappMovableView 运行效果 核心 ...
- ELK平台搭建及日志监控
一.使用背景 当生产环境有很多服务器.很多业务模块的日志需要每时每刻查看时 二.环境 系统:centos 6.5 JDK:1.8 Elasticsearch-5.0.0 Logstash-5.0.0 ...
- MongoDB 数据库备份还原
数据库备份 在 Mongodb 中我们使用 mongodump 命令来备份 MongoDB 数据.该命令可以导出所有数据 到指定目录中. mongodump 命令可以通过参数指定导出的数据量级转存的服 ...
- chown与chmod的区别
chown 修改文件和文件夹的用户和用户组属性 1.要修改文件hh.c的所有者.修改为sakia的这个用户所有 chown sakia hh.c 这样就把hh.c的用户访问权限应用到sakia作为所有 ...
- 统一异常处理@ControllerAdvice
一.异常处理 有异常就必须处理,通常会在方法后面throws异常,或者是在方法内部进行try catch处理. 直接throws Exception 直接throws Exception,抛的异常太过 ...
- 刷题记录:[De1CTF 2019]SSRF Me
目录 刷题记录:[De1CTF 2019]SSRF Me 一.涉及知识点 1.MD5长度扩展攻击 2.Python 2.x - 2.7.16 urllib.fopen支持local_file导致LFI ...
- 2015-2016-2《Java程序设计》团队博客1
项目内容 经过一些讨论之后决定了最终的项目:简易画图板项目设计与开发 目标 制作一个能够画各种图形的画板,并能有多种颜色可以选择:输入文本时也可以选择字体:能够保存,新建,和导入图片 实现计划 十一周 ...
- 菜鸟学IT之豆瓣爬取初体验
作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3159 可以用pandas读出之前保存的数据: newsdf = pd.re ...
- Spring Cloud Eureka配置文件详解
本篇内容用来说明Eureka 常用配置的含义. 以下配置都是以 eureka.server 开头: 参数 描述 备注 eureka.server.eviction-interval-timer-in- ...
- linux声卡录音和播放(alsa方法)
前言 客户购买多台UNO-2184,使用fedora23系统进行视频监控,视频监控的同时,也要同步采集现场画面的声音,原来系统采用的是fedora 14,之前是通过操作/dev/bsp,对声卡进行操作 ...