zoukankan      html  css  js  c++  java
  • 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>
    

      

  • 相关阅读:
    P1144 最短路计数 题解 最短路应用题
    C++高精度加减乘除模板
    HDU3746 Teacher YYF 题解 KMP算法
    POJ3080 Blue Jeans 题解 KMP算法
    POJ2185 Milking Grid 题解 KMP算法
    POJ2752 Seek the Name, Seek the Fame 题解 KMP算法
    POJ2406 Power Strings 题解 KMP算法
    HDU2087 剪花布条 题解 KMP算法
    eclipse创建maven项目(详细)
    maven的作用及优势
  • 原文地址:https://www.cnblogs.com/sunliyuan/p/10890387.html
Copyright © 2011-2022 走看看