亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java簡單實現SpringMVC+MyBatis分頁插件

2019-11-26 15:00:16
字體:
來源:轉載
供稿:網友

1.封裝分頁Page類

package com.framework.common.page.impl;import java.io.Serializable;import com.framework.common.page.IPage;/** *  *  * */public abstract class BasePage implements IPage, Serializable {  /**   *    */  private static final long serialVersionUID = -3623448612757790359L;    public static int DEFAULT_PAGE_SIZE = 20;  private int pageSize = DEFAULT_PAGE_SIZE;  private int currentResult;  private int totalPage;  private int currentPage = 1;  private int totalCount = -1;  public BasePage(int currentPage, int pageSize, int totalCount) {    this.currentPage = currentPage;    this.pageSize = pageSize;    this.totalCount = totalCount;  }  public int getTotalCount() {    return this.totalCount;  }  public void setTotalCount(int totalCount) {    if (totalCount < 0) {      this.totalCount = 0;      return;    }    this.totalCount = totalCount;  }  public BasePage() {  }  public int getFirstResult() {    return (this.currentPage - 1) * this.pageSize;  }  public void setPageSize(int pageSize) {    if (pageSize < 0) {      this.pageSize = DEFAULT_PAGE_SIZE;      return;    }    this.pageSize = pageSize;  }  public int getTotalPage() {    if (this.totalPage <= 0) {      this.totalPage = (this.totalCount / this.pageSize);      if ((this.totalPage == 0) || (this.totalCount % this.pageSize != 0)) {        this.totalPage += 1;      }    }    return this.totalPage;  }  public int getPageSize() {    return this.pageSize;  }  public void setPageNo(int currentPage) {    this.currentPage = currentPage;  }  public int getPageNo() {    return this.currentPage;  }  public boolean isFirstPage() {    return this.currentPage <= 1;  }  public boolean isLastPage() {    return this.currentPage >= getTotalPage();  }  public int getNextPage() {    if (isLastPage()) {      return this.currentPage;    }    return this.currentPage + 1;  }  public int getCurrentResult() {    this.currentResult = ((getPageNo() - 1) * getPageSize());    if (this.currentResult < 0) {      this.currentResult = 0;    }    return this.currentResult;  }  public int getPrePage() {    if (isFirstPage()) {      return this.currentPage;    }    return this.currentPage - 1;  }}
package com.framework.common.page.impl;import java.util.List;/** *  *  * */public class Page extends BasePage {  /**   *    */  private static final long serialVersionUID = -970177928709377315L;  public static ThreadLocal<Page> threadLocal = new ThreadLocal<Page>();  private List<?> data;     public Page() {  }  public Page(int currentPage, int pageSize, int totalCount) {    super(currentPage, pageSize, totalCount);  }  public Page(int currentPage, int pageSize, int totalCount, List<?> data) {    super(currentPage, pageSize, totalCount);    this.data = data;  }  public List<?> getData() {    return data;  }  public void setData(List<?> data) {    this.data = data;  }  }

2.封裝分頁插件

package com.framework.common.page.plugin;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.List;import java.util.Properties;import javax.xml.bind.PropertyException;import org.apache.commons.lang3.StringUtils;import org.apache.ibatis.executor.ErrorContext;import org.apache.ibatis.executor.ExecutorException;import org.apache.ibatis.executor.statement.BaseStatementHandler;import org.apache.ibatis.executor.statement.RoutingStatementHandler;import org.apache.ibatis.mapping.BoundSql;import org.apache.ibatis.mapping.MappedStatement;import org.apache.ibatis.mapping.ParameterMapping;import org.apache.ibatis.mapping.ParameterMode;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.reflection.MetaObject;import org.apache.ibatis.reflection.property.PropertyTokenizer;import org.apache.ibatis.scripting.xmltags.ForEachSqlNode;import org.apache.ibatis.session.Configuration;import org.apache.ibatis.type.TypeHandler;import org.apache.ibatis.type.TypeHandlerRegistry;import com.framework.common.page.impl.Page;import com.framework.common.utils.ReflectUtil;/** *  *  * */@Intercepts({ @org.apache.ibatis.plugin.Signature(type = org.apache.ibatis.executor.statement.StatementHandler.class, method = "prepare", args = { Connection.class }) })public class PagePlugin implements Interceptor {  private String dialect = "";  private String pageSqlId = "";  @Override  public Object intercept(Invocation invocation) throws Throwable {    if (invocation.getTarget() instanceof RoutingStatementHandler) {      BaseStatementHandler delegate = (BaseStatementHandler) ReflectUtil          .getValueByFieldName(              (RoutingStatementHandler) invocation.getTarget(),              "delegate");      MappedStatement mappedStatement = (MappedStatement) ReflectUtil          .getValueByFieldName(delegate,              "mappedStatement");      Page page = Page.threadLocal.get();      if (page == null) {        page = new Page();        Page.threadLocal.set(page);      }      if (mappedStatement.getId().matches(".*(" + this.pageSqlId + ")$") && page.getPageSize() > 0) {        BoundSql boundSql = delegate.getBoundSql();        Object parameterObject = boundSql.getParameterObject();        String sql = boundSql.getSql();        String countSqlId = mappedStatement.getId().replaceAll(pageSqlId, "Count");        MappedStatement countMappedStatement = null;        if (mappedStatement.getConfiguration().hasStatement(countSqlId)) {          countMappedStatement = mappedStatement.getConfiguration().getMappedStatement(countSqlId);        }        String countSql = null;        if (countMappedStatement != null) {          countSql = countMappedStatement.getBoundSql(parameterObject).getSql();        } else {          countSql = "SELECT COUNT(1) FROM (" + sql + ") T_COUNT";        }                int totalCount = 0;        PreparedStatement countStmt = null;        ResultSet resultSet = null;        try {          Connection connection = (Connection) invocation.getArgs()[0];          countStmt = connection.prepareStatement(countSql);          BoundSql countBoundSql = new BoundSql(mappedStatement.getConfiguration(), countSql, boundSql.getParameterMappings(), parameterObject);                    setParameters(countStmt, mappedStatement, countBoundSql, parameterObject);                    resultSet = countStmt.executeQuery();          if(resultSet.next()) {            totalCount = resultSet.getInt(1);          }        } catch (Exception e) {          throw e;        } finally {          try {            if (resultSet != null) {              resultSet.close();            }          } finally {            if (countStmt != null) {              countStmt.close();            }          }        }                page.setTotalCount(totalCount);                ReflectUtil.setValueByFieldName(boundSql, "sql", generatePageSql(sql,page));      }    }    return invocation.proceed();  }    /**    * 對SQL參數(?)設值,參考org.apache.ibatis.executor.parameter.DefaultParameterHandler    * @param ps    * @param mappedStatement    * @param boundSql    * @param parameterObject    * @throws SQLException    */   private void setParameters(PreparedStatement ps,MappedStatement mappedStatement,BoundSql boundSql,Object parameterObject) throws SQLException {     ErrorContext.instance().activity("setting parameters").object(mappedStatement.getParameterMap().getId());     List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();     if (parameterMappings != null) {       Configuration configuration = mappedStatement.getConfiguration();       TypeHandlerRegistry typeHandlerRegistry = configuration.getTypeHandlerRegistry();       MetaObject metaObject = parameterObject == null ? null: configuration.newMetaObject(parameterObject);       for (int i = 0; i < parameterMappings.size(); i++) {         ParameterMapping parameterMapping = parameterMappings.get(i);         if (parameterMapping.getMode() != ParameterMode.OUT) {           Object value;           String propertyName = parameterMapping.getProperty();           PropertyTokenizer prop = new PropertyTokenizer(propertyName);           if (parameterObject == null) {             value = null;           } else if (typeHandlerRegistry.hasTypeHandler(parameterObject.getClass())) {             value = parameterObject;           } else if (boundSql.hasAdditionalParameter(propertyName)) {             value = boundSql.getAdditionalParameter(propertyName);           } else if (propertyName.startsWith(ForEachSqlNode.ITEM_PREFIX)&& boundSql.hasAdditionalParameter(prop.getName())) {             value = boundSql.getAdditionalParameter(prop.getName());             if (value != null) {               value = configuration.newMetaObject(value).getValue(propertyName.substring(prop.getName().length()));             }           } else {             value = metaObject == null ? null : metaObject.getValue(propertyName);           }           TypeHandler typeHandler = parameterMapping.getTypeHandler();           if (typeHandler == null) {             throw new ExecutorException("There was no TypeHandler found for parameter "+ propertyName + " of statement "+ mappedStatement.getId());           }           typeHandler.setParameter(ps, i + 1, value, parameterMapping.getJdbcType());         }       }     }   }     /**    * 根據數據庫方言,生成特定的分頁sql    * @param sql    * @param page    * @return    */   private String generatePageSql(String sql,Page page){     if(page!=null && StringUtils.isNotBlank(dialect)){       StringBuffer pageSql = new StringBuffer();       if("mysql".equals(dialect)){         pageSql.append(sql);         pageSql.append(" LIMIT "+page.getCurrentResult()+","+page.getPageSize());       }else if("oracle".equals(dialect)){         pageSql.append("SELECT * FROM (SELECT TMP_TB.*,ROWNUM ROW_ID FROM (");         pageSql.append(sql);         pageSql.append(") AS TMP_TB WHERE ROWNUM <= ");         pageSql.append(page.getCurrentResult()+page.getPageSize());         pageSql.append(") WHERE ROW_ID > ");         pageSql.append(page.getCurrentResult());       }       return pageSql.toString();     }else{       return sql;     }   }   @Override  public Object plugin(Object target) {    return Plugin.wrap(target, this);  }  @Override  public void setProperties(Properties properties) {    try {      if (StringUtils.isEmpty(this.dialect = properties          .getProperty("dialect"))) {        throw new PropertyException("dialect property is not found!");      }      if (StringUtils.isEmpty(this.pageSqlId = properties          .getProperty("pageSqlId"))) {        throw new PropertyException("pageSqlId property is not found!");      }    } catch (PropertyException e) {      e.printStackTrace();    }  }}

3.MyBatis配置文件:mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD SQL Map Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>  <plugins>    <plugin interceptor="com.framework.common.page.plugin.PagePlugin">      <property name="dialect" value="mysql" />      <property name="pageSqlId" value="ByPage" />    </plugin>  </plugins></configuration>

4.分頁攔截器

package com.framework.common.page.interceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang3.math.NumberUtils;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import com.framework.common.page.impl.Page;/*** * 14 **/public class PageInterceptor extends HandlerInterceptorAdapter { @Override public void postHandle(HttpServletRequest request,     HttpServletResponse response, Object handler,     ModelAndView modelAndView) throws Exception {   super.postHandle(request, response, handler, modelAndView);   Page page = Page.threadLocal.get();   if (page != null) {     request.setAttribute("page", page);   }   Page.threadLocal.remove(); } @Override public boolean preHandle(HttpServletRequest request,     HttpServletResponse response, Object handler) throws Exception {   String pageSize = request.getParameter("pageSize");   String pageNo = request.getParameter("pageNo");   Page page = new Page();   if (NumberUtils.isNumber(pageSize)) {     page.setPageSize(NumberUtils.toInt(pageSize));   }   if (NumberUtils.isNumber(pageNo)) {     page.setPageNo(NumberUtils.toInt(pageNo));   }   Page.threadLocal.set(page);   return true; }}

5.Spring配置

<!-- =================================================================== - Load property file - =================================================================== --><context:property-placeholder location="classpath:application.properties" /><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  <property name="dataSource" ref="dataSource" />  <property name="configLocation" value="classpath:mybatis-config.xml" />  <property name="mapperLocations">    <list>      <value>classpath:/com/framework/mapper/**/*Mapper.xml</value>    </list>  </property></bean><!-- =================================================================== - 通過掃描的模式,掃描目錄下所有的dao, 根據對應的mapper.xml為其生成代理類 - =================================================================== --><bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">  <property name="basePackage" value="com.framework.dao" />  <property name="processPropertyPlaceHolders" value="true" />  <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /></bean>

6.SpringMVC配置攔截器

<!-- 分頁攔截器 -->  <bean id="pageInterceptor" class="com.framework.common.page.interceptor.PageInterceptor"></bean>    <!-- 配置攔截器 -->  <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">    <property name="interceptors">      <list>        <ref bean="pageInterceptor" />      </list>    </property>  </bean>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情精品久久久| 国产热re99久久6国产精品| 久久久成人av| 91欧美精品午夜性色福利在线| 丁香五六月婷婷久久激情| 中文字幕不卡av| 日韩欧美在线免费| 国产成人黄色av| 日韩小视频网址| 一区二区三区美女xx视频| 麻豆精品精华液| 国产脚交av在线一区二区| 国产精品久久久久av免费| 欧美香蕉大胸在线视频观看| www.久久久久久.com| 日韩精品视频三区| 亚洲激情 国产| 国产精品久久久久久久久久三级| 亚洲区在线播放| 欧美插天视频在线播放| 97精品国产91久久久久久| 欧美午夜视频一区二区| …久久精品99久久香蕉国产| 色小说视频一区| 欧美xxxx综合视频| 亚洲人成网站在线播| 国产精品久久久久久久久久免费| 国产精品中文字幕久久久| 亚洲字幕在线观看| 538国产精品一区二区免费视频| 国产精品日日做人人爱| 欧美日韩第一视频| 亚洲最大的网站| 日韩福利伦理影院免费| 国产v综合ⅴ日韩v欧美大片| 欧美日韩精品在线观看| 国产一区视频在线| 亚洲午夜未删减在线观看| 欧美日韩中文字幕日韩欧美| 国产精品日韩电影| 55夜色66夜色国产精品视频| 欧美—级a级欧美特级ar全黄| 欧美黑人又粗大| 日韩精品丝袜在线| 日韩av影视综合网| 国产欧美精品日韩| 欧美亚洲视频在线观看| 国产97色在线| 91天堂在线观看| 日韩成人xxxx| 亚洲第一免费播放区| 欧美日韩亚洲国产一区| 成人女保姆的销魂服务| 成人啪啪免费看| 懂色av影视一区二区三区| 欧美亚洲成人xxx| 国产精品免费观看在线| 欧美色欧美亚洲高清在线视频| 日本91av在线播放| 欧美www视频在线观看| 午夜剧场成人观在线视频免费观看| 国内精品美女av在线播放| 在线视频欧美日韩| 精品国产91乱高清在线观看| 欧美有码在线视频| 日韩电影大片中文字幕| 国产精品一区二区久久精品| 亚洲天堂色网站| 久久伊人免费视频| 欧美日韩亚洲一区二区| 久久久久久网站| 久久久久免费视频| 国产精品久久久精品| 欧美极品美女视频网站在线观看免费| 精品无人区太爽高潮在线播放| 2019中文字幕免费视频| 国产精品久久久久99| 亚洲成人黄色网址| 日本不卡免费高清视频| 日韩免费av在线| 成人有码在线播放| 亚洲一区二区三区乱码aⅴ| www亚洲欧美| 中文字幕在线视频日韩| 亚洲精品国产拍免费91在线| 午夜精品美女自拍福到在线| 91精品综合久久久久久五月天| 日韩成人在线免费观看| 91国内产香蕉| 中文字幕综合在线| 中文字幕一区日韩电影| 国产盗摄xxxx视频xxx69| 欧美性高潮在线| 少妇激情综合网| 91在线观看免费高清完整版在线观看| 亚洲2020天天堂在线观看| 亚洲第一天堂av| 成人黄色片在线| 日韩欧美一区视频| 国产精品久久久久久久久免费看| 日韩av在线电影网| 亚洲欧美国产高清va在线播| 北条麻妃在线一区二区| 91丨九色丨国产在线| 97超级碰在线看视频免费在线看| 亚洲欧美中文日韩在线v日本| 亚洲男人天堂九九视频| 懂色av一区二区三区| 青青在线视频一区二区三区| 久久久久国产精品一区| 久久久国产精品x99av| 国产欧美一区二区三区久久人妖| 国产成人精品一区二区| 日韩av一区二区在线观看| 亚洲性线免费观看视频成熟| 亚洲永久免费观看| 国产69精品久久久久99| 欧美中文字幕第一页| 成人做爰www免费看视频网站| 国产视频精品一区二区三区| 欧美日韩中文在线观看| 一区二区三区黄色| 97超级碰碰碰久久久| 亚洲伊人久久综合| 国产精品久久久久一区二区| 日产精品久久久一区二区福利| 亚洲 日韩 国产第一| 欧美激情一区二区久久久| xx视频.9999.com| 91九色单男在线观看| 久久久久久网址| 精品成人av一区| 欧美日韩国产区| 国产美女久久久| 日本道色综合久久影院| 精品亚洲一区二区三区在线播放| 久久91超碰青草是什么| 欧美激情喷水视频| 久久精品国产清自在天天线| 97国产一区二区精品久久呦| 国产亚洲免费的视频看| 亚洲欧美成人一区二区在线电影| 日韩成人激情在线| 一区二区欧美日韩视频| 亚洲最大福利视频| 欧美黄色成人网| www.美女亚洲精品| 亚洲jizzjizz日本少妇| 午夜精品免费视频| 亚洲午夜未满十八勿入免费观看全集| 亚洲黄色有码视频| www.xxxx欧美| 精品国产一区二区三区久久久狼| 色哟哟网站入口亚洲精品| 在线中文字幕日韩| 精品国产老师黑色丝袜高跟鞋| 久久久久久国产精品美女| 欧美高清在线视频观看不卡| 日av在线播放中文不卡| 国产精品久久久久久久一区探花| 久久精品一区中文字幕| 最新国产成人av网站网址麻豆| 亚洲黄色www| 色www亚洲国产张柏芝|