ibatis支持hibernate式的物理分页

ibatis支持hibernate式的物理分页

ID:39549262

大小:155.50 KB

页数:13页

时间:2019-07-06

ibatis支持hibernate式的物理分页_第1页
ibatis支持hibernate式的物理分页_第2页
ibatis支持hibernate式的物理分页_第3页
ibatis支持hibernate式的物理分页_第4页
ibatis支持hibernate式的物理分页_第5页
资源描述:

《ibatis支持hibernate式的物理分页》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、对IBatis分页的改进,使ibatis支持hibernate式的物理分页一直以来ibatis的分页都是通过滚动ResultSet实现的,应该算是逻辑分页吧。逻辑分页虽然能很干净地独立于特定数据库,但效率在多数情况下不及特定数据库支持的物理分页,而hibernate的分页则是直接组装sql,充分利用了特定数据库的分页机制,效率相对较高。本文讲述的就是如何在不重新编译ibatis源码的前提下,为ibatis引入hibernate式的物理分页机制。基本思路就是找到ibatis执行sql的地方,截获sql并重新

2、组装sql。通过分析ibatis源码知道,最终负责执行sql的类是com.ibatis.sqlmap.engine.execution.SqlExecutor,此类没有实现任何接口,这多少有点遗憾,因为接口是相对稳定契约,非大的版本更新,接口一般是不会变的,而类就相对易变一些,所以这里的代码只能保证对当前版本(2.1.7)的ibatis有效。下面是SqlExecutor执行查询的方法:Java代码1./** 2.   * Long form of the method to execute a query

3、 3.   * 4.   * @param request - the request scope 5.   * @param conn - the database connection 6.   * @param sql - the SQL statement to execute 7.   * @param parameters - the parameters for the statement 8.   * @param skipResults - the number of results t

4、o skip 9.   * @param maxResults - the maximum number of results to return 10.   * @param callback - the row handler for the query 11.   * 12.   * @throws SQLException - if the query fails 13.   */  14.  public void executeQuery(RequestScope request, Conne

5、ction conn, String sql, Object[] parameters,  15.                           int skipResults, int maxResults, RowHandlerCallback callback)  16.      throws SQLException {  1.    ErrorContext errorContext = request.getErrorContext();  2.    errorContext.set

6、Activity("executing query");  3.    errorContext.setObjectId(sql);  4.  5.    PreparedStatement ps = null;  6.    ResultSet rs = null;  7.  8.    try {  9.      errorContext.setMoreInfo("Check the SQL Statement (preparation failed).");  10.  11.      Inte

7、ger rsType = request.getStatement().getResultSetType();  12.      if (rsType != null) {  13.        ps = conn.prepareStatement(sql, rsType.intValue(), ResultSet.CONCUR_READ_ONLY);  14.      } else {  15.        ps = conn.prepareStatement(sql);  16.      }

8、  17.  18.      Integer fetchSize = request.getStatement().getFetchSize();  19.      if (fetchSize != null) {  20.        ps.setFetchSize(fetchSize.intValue());  21.      }  22.  23.      errorContext.setMoreInfo("C

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。