package cn.org.rapid_framework.ibatis.util; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.orm.ibatis.SqlMapClientTemplate; import cn.org.rapid_framework.util.MapAndObject; import cn.org.rapid_framework.util.page.PageList; import cn.org.rapid_framework.util.page.PageQuery; import cn.org.rapid_framework.util.page.Paginator; /** * Ibatis的分页查询工具类. 将为分页查询提供附加的四个参数 * 基于0开始的: offset, limit 用于mysql分页查询 * 基于1开始的: startRow,endRow 用于oracle分页查询 * * @author badqiu * @version $Id: PageQueryUtils.java,v 0.1 2010-7-28 下午04:45:27 badqiu Exp $ */ @SuppressWarnings("unchecked") public class PageQueryUtils { /** * 封装ibatis的分页查询 * @param sqlMapClientTemplate * @param statementName * @param parameterObject * @return */ public static PageList pageQuery(SqlMapClientTemplate sqlMapClientTemplate, String statementName, PageQuery parameterObject) { return pageQuery(sqlMapClientTemplate, statementName, statementName+".count", parameterObject, parameterObject.getPage(), parameterObject.getPageSize()); } /** * 封装ibatis的分页查询 * @param sqlMapClientTemplate * @param statementName * @param countStatementName count查询sql,用于查询count总数 * @param parameterObject * @return */ public static PageList pageQuery(SqlMapClientTemplate sqlMapClientTemplate, String statementName, String countStatementName, PageQuery parameterObject) { return pageQuery(sqlMapClientTemplate, statementName, countStatementName, parameterObject, parameterObject.getPage(), parameterObject.getPageSize()); } /** * 封装ibatis的分页查询 * @return */ public static PageList pageQuery(SqlMapClientTemplate sqlMapClientTemplate, String statementName, Object parameterObject, int page, int pageSize) { return pageQuery(sqlMapClientTemplate, statementName,statementName+".count", parameterObject, page, pageSize); } /** * 封装ibatis的分页查询 * @return */ public static PageList pageQuery(SqlMapClientTemplate sqlMapClientTemplate, String statementName, String countStatementName, Object parameterObject, int page, int pageSize) { Number totalCount = (Number)sqlMapClientTemplate.queryForObject(countStatementName, parameterObject); if (totalCount != null && totalCount.intValue() > 0) { Paginator paginator = new Paginator(page,pageSize,totalCount.intValue()); Map<String, Integer> otherParams = new HashMap<String, Integer>(); otherParams.put("offset", paginator.getOffset()); otherParams.put("limit", paginator.getLimit()); otherParams.put("startRow", paginator.getStartRow()); otherParams.put("endRow", paginator.getEndRow()); List list = sqlMapClientTemplate.queryForList(statementName,new MapAndObject(otherParams,parameterObject)); return new PageList(list, paginator); } return new PageList(new Paginator(0, pageSize,0)); } }