设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 数据 手机
当前位置: 首页 > 站长学院 > MySql教程 > 正文

Mybatis超详细插件机制解析,弄懂拦截器So easy(7)

发布时间:2019-12-25 22:25 所属栏目:115 来源:站长网
导读:MappedStatementmappedStatement=(MappedStatement)metaStatementHandler.getValue(delegate.mappedStatement); //分页信息if(localPage.get()!=null){ Pagepage=localPage.get(); BoundSqlboundSql=(BoundSql)meta

      MappedStatement mappedStatement = (MappedStatement) metaStatementHandler.getValue("delegate.mappedStatement"); 

      //分页信息if (localPage.get() != null) { 

      Page page = localPage.get(); 

      BoundSql boundSql = (BoundSql) metaStatementHandler.getValue("delegate.boundSql"); 

      // 分页参数作为参数对象parameterObject的一个属性 

      String sql = boundSql.getSql(); 

      // 重写sql 

      String pageSql = buildPageSql(sql, page); 

      //重写分页sql 

      metaStatementHandler.setValue("delegate.boundSql.sql", pageSql); 

      Connection connection = (Connection) invocation.getArgs()[0]; 

      // 重设分页参数里的总页数等 

      setPageParameter(sql, connection, mappedStatement, boundSql, page); 

      // 将执行权交给下一个插件 

      return invocation.proceed(); 

    } else if (invocation.getTarget() instanceof ResultSetHandler) { 

      Object result = invocation.proceed(); 

      Page page = localPage.get(); 

      page.setResult((List) result); 

      return result; 

    } 

    return null; 

  } 

 

  /** 

   * 只拦截这两种类型的 

   * <br>StatementHandler 

   * <br>ResultSetHandler 

   * 

   * @param target 

   * @return 

   */ 

  public Object plugin(Object target) { 

    if (target instanceof StatementHandler || target instanceof ResultSetHandler) { 

      return Plugin.wrap(target, this); 

    } else { 

      return target; 

    } 

  } 

 

  public void setProperties(Properties properties) { 

 

  } 

 

  /** 

   * 修改原SQL为分页SQL 

   * 

   * @param sql 

   * @param page 

   * @return 

   */ 

  private String buildPageSql(String sql, Page page) { 

    StringBuilder pageSql = new StringBuilder(200); 

    pageSql.append("select * from ("); 

    pageSql.append(sql); 

    pageSql.append(" ) temp limit ").append(page.getStartRow()); 

    pageSql.append(" , ").append(page.getPageSize()); 

    return pageSql.toString(); 

  } 

 

  /** 

   * 获取总记录数 

   * 

   * @param sql 

   * @param connection 

   * @param mappedStatement 

   * @param boundSql 

   * @param page 

   */ 

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读