• 关于ibatis进行物理游标分页


    http://www.iteye.com/topic/136712

    详细demo:参照http://www.kusoft.net

    我的数据库是采用mssql2000 
    采用分页必定数据量比较大: 
    按照ibatis的自带的是缓存分页.如果一大的肯定内存吃不消. 但是可以采用queryForList,却得不到总记录数码相. 
    要得到总记录数,因此我采用物理游标进行分页. 
    功能:需要得到结果的记录数,显示每页几行 

    (1)定义一个接口Pager: 

    Java代码  收藏代码
    1. public interface Pager {  
    2.     //总共几行  
    3.     public int getRows();  
    4.     //存入一页的数据  
    5.     public List<Object> getList();  
    6.       
    7.     public void setList(List<Object> list);  
    8.       
    9.     public void setRows(int rows);  
    10. }  



    (2)Pager实现类PagerImpl 

    Java代码  收藏代码
    1. public class PagerImpl implements Pager {  
    2.       
    3.     private List<Object> list = null;  
    4.     private int rows = 0;  
    5.       
    6.     public List<Object> getList() {  
    7.         return list;  
    8.     }  
    9.     public void setList(List<Object> list) {  
    10.         this.list = list;  
    11.     }  
    12.   
    13.     public int getRows() {  
    14.         return rows;  
    15.     }  
    16.     public void setRows(int rows) {  
    17.         this.rows = rows;  
    18.     }  
    19.   
    20. }  




    (3)扩展ibatis自带接口 SqlMapExecutor 

    Java代码  收藏代码
    1.    
    2. //skip 起启行,max每页几行  
    3.  Pager queryForPager(String id, Object parameterObject, int skip, int max) throws SQLException;  
    4.   
    5.   Pager queryForPager(String id, Object parameterObject, int skip) throws SQLException;  
    6.   //根据条件查出所有结果  
    7.   Pager queryForPager(String id, Object parameterObject) throws SQLException;  
    8.     




    (4)扩展ibatis接口 SqlMapExecutor的实现类有两个SqlMapClientImpl,SqlMapSessionImpl 

    Java代码  收藏代码
    1. SqlMapClientImpl的扩展如下  
    2. public Pager queryForPager(String id, Object paramObject, int skip, int max)  
    3.             throws SQLException {  
    4.         if (max <= 0)  
    5.             return getLocalSqlMapSession().queryForPager(id, paramObject, skip);  
    6.         else  
    7.             return getLocalSqlMapSession().queryForPager(id, paramObject, skip,  
    8.                     max);  
    9.     }  
    10.   
    11.     public Pager queryForPager(String id, Object parameterObject, int skip)  
    12.             throws SQLException {  
    13.         return getLocalSqlMapSession().queryForPager(id, parameterObject, skip,  
    14.                 SqlExecutor.NO_MAXIMUM_RESULTS);  
    15.     }  
    16.   
    17.     public Pager queryForPager(String id, Object parameterObject)  
    18.             throws SQLException {  
    19.         return getLocalSqlMapSession().queryForPager(id, parameterObject,  
    20.                 SqlExecutor.NO_SKIPPED_RESULTS, SqlExecutor.NO_MAXIMUM_RESULTS);  
    21.     }  




    (5)最终修改SqlExecutor获取总记录数 
    SqlExecutor:439行 

    Java代码  收藏代码
    1. if (resultMap != null) {  
    2.                 // Skip Results  
    3.                 if (rs.getType() != ResultSet.TYPE_FORWARD_ONLY) {  
    4.                     rs.beforeFirst();  
    5.                     if (skipResults > 0) {  
    6.                         rs.absolute(skipResults);  
    7.                     }  
    8.                 } else {  
    9.                     for (int i = 0; i < skipResults; i++) {  
    10.                         if (!rs.next()) {  
    11.                             return;  
    12.                         }  
    13.                     }  
    14.                 }  
    15.   
    16.                 // Get Results  
    17.                 int resultsFetched = 0;  
    18.                 while ((maxResults == SqlExecutor.NO_MAXIMUM_RESULTS || resultsFetched < maxResults)  
    19.                         && rs.next()) {  
    20.                     Object[] columnValues = resultMap  
    21.                             .resolveSubMap(request, rs).getResults(request, rs);  
    22.                     callback.handleResultObject(request, columnValues, rs);  
    23.                     resultsFetched++;  
    24.                 }  
    25.                 if (rs.getType() != ResultSet.TYPE_FORWARD_ONLY) {  
    26.                     rs.last();  
    27.                     request.setRows(rs.getRow());  
    28.                 } else {  
    29.                     int total = skipResults + resultsFetched;  
    30.                     while(rs.next()){  
    31.                         total++;  
    32.                     }  
    33.                     request.setRows(total);  
    34.                 }  
    35.                   
    36.             }  





    这样就可以了 

    (6)如何调用 
    6.1创建一个方法 

    Java代码  收藏代码
    1. public static Pager pager(GroupVO vo,int offset,int limit)throws SQLException{  
    2.       return sqlMapper.queryForPager("list",vo,offset);  
    3.   }  



    Java代码  收藏代码
    1. public static void main(String[] args){  
    2.       try {  
    3.         SimpleExample se = new SimpleExample();  
    4.         GroupVO vo = new GroupVO();  
    5.         Pager pager = se.pager(vo,0,10);  
    6.          //vo.setGroup_no("100");  
    7.           //vo.setGroup_name("fengjian");  
    8.           //vo.setGroup_desc("thanks");  
    9.           
    10.         System.out.println("totalsize = "+pager.getRows());  
    11.         List list = pager.getList();  
    12.         if(list!=null)  
    13.             for(int i=0; i<list.size(); i++){  
    14.                 GroupVO v = (GroupVO)list.get(i);  
    15.                 System.out.println("group no = " + v.getGroup_no());  
    16.             }  
    17.           
    18.     } catch (SQLException e) {  
    19.         e.printStackTrace();  
    20.     }  
    21.   }  




    有什么不同看法:msn:linuxfjy@hotmail.com, mail: kusoft@qq.com

  • 相关阅读:
    operator模块和functools模块
    函数注解
    用户定义的可调用类型、从定位参数到仅限关键字参数
    可调用对象
    nxos启动的初始化和https访问nx-api
    网络安全基础之网络协议与安全威胁
    华为AC中服务集命令解释配置
    转:图解ARP协议(四)代理ARP原理与实践(“善意的欺骗”)
    windows下python3 python2 共存下安装virtualenvwrapper
    关于网络安全学习的网站
  • 原文地址:https://www.cnblogs.com/jukan/p/5253670.html
Copyright © 2020-2023  润新知