• 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>
    

      

  • 相关阅读:
    Git
    Shell-sed之替换字符
    Linux IO/NFS tunning 性能优化及检测
    利用Java Flight Recorder(JFR)诊断timing及内存问题
    Get/Post
    SQL-1
    HTTP协议简要
    nmap简单使用
    (C语言)买东西找零钱
    今日错误(C语言)(定义二维数组储存)
  • 原文地址:https://www.cnblogs.com/sunliyuan/p/10890387.html
Copyright © 2020-2023  润新知