ibatis分页兑现(postgresql版)
PagerModel类(通过传递一个查询实体进行查询)
/** * */ package com.audit.util; import java.util.List; /** * @author chenpeng * @file_name PagerModel.java * @create_time 2010-7-27:下午05:21:16 * @email onlychenpeng@msn.com * TODO */ public class PagerModel { //总数 private int total; //当前页码,默认为1 private int currentPage=1; //总页数 private int totalPage; //页面大小,默认为10 private int pageSize; //开始,默认为0 private int startCount=0; //当前页面的长度 private int currentSize=0; //是否存在下一页 private boolean hasNext; //是否存在上一页 private boolean hasPre; //ibatis的example查询实体 private Object obj; //查询出来的数据 private List datas; /** * 首页 */ public void first(){ this.init(1); } /** * 首页,带页面大小 * */ public void first(int pageSize){ this.init(1, pageSize); } /** * 下一页 * */ public void next(){ this.currentPage++; this.init(this.currentPage); } /** * 上一页 * */ public void pre(){ this.currentPage--; this.init(this.currentPage); } /** * 最后一页 * */ public void last(){ this.currentPage=this.totalPage; this.init(this.currentPage); } /***/ /** * 统一初始化所有参数 */ public void init(int currentPage,int pageSize){ //当传入的数不大于0时,把当前页面设为了1,页面大小设为10 if(currentPage<1){ this.currentPage=1; }else{ this.currentPage=currentPage; } if(pageSize<1){ this.pageSize=10; }else{ this.pageSize=pageSize; } this.startCount=(this.currentPage-1)*this.pageSize; } /** * 统一初始化所有参数 * @param currentPage */ public void init(int currentPage){ //当传入的数不大于0时,把当前页面设为了1,页面大小设为10 if(currentPage<1){ this.currentPage=1; }else{ this.currentPage=currentPage; } this.startCount=(this.currentPage-1)*this.pageSize; } public void setTotal(int total) { this.total = total; //计算出总页数 int a=this.total/this.pageSize; //商 int b=this.total%this.pageSize; //余 if(0!=b){ a++; } this.totalPage=a; } //相应的getter&&setter public int getStartCount() { return startCount; } public void setStartCount(int startCount) { this.startCount = startCount; } public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getTotal() { return total; } public List getDatas() { return datas; } public void setDatas(List datas) { this.datas = datas; this.currentSize=datas.size(); } public int getTotalPage() { return totalPage; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } public Object getObj() { return obj; } public void setObj(Object obj) { this.obj = obj; } public int getCurrentSize() { return currentSize; } public void setCurrentSize(int currentSize) { this.currentSize = currentSize; } public boolean isHasNext() { if(this.currentPage<this.totalPage){ return true; }else { return false; } } public void setHasNext(boolean hasNext) { this.hasNext = hasNext; } public boolean isHasPre() { if(this.currentPage>1){ return true; }else{ return false; } } public void setHasPre(boolean hasPre) { this.hasPre = hasPre; } }
xml文件(要进行两次查询,一个是查询记录总数,一个是返回所有记录)
<!-- 查找总数 --> <select id="findByExampleCount" parameterClass="PagerModel" resultClass="int"> select count(*) from "fTest" <dynamic prepend="WHERE"> <isNotNull property="obj" prepend="AND" open="(" close=")" removeFirstPrepend="true"> <isNotNull property="obj.test" prepend="AND"> test like '$obj.test$%' </isNotNull> </isNotNull> </dynamic> </select> <!-- 查找记录 --> <select id="findByExample" parameterClass="PagerModel" resultClass="FTest" cacheModel="fTestCache"> select * from "fTest" <dynamic prepend="WHERE"> <isNotNull property="obj" prepend="AND" open="(" close=")" removeFirstPrepend="true"> <isNotNull property="obj.test" prepend="AND"> test like '$obj.test$%' </isNotNull> </isNotNull> </dynamic> limit #pageSize# offset #startCount# </select>
DAO类(返回一个PagerModel)
单元测试代码 测试结果: 总记录数:21 public PagerModel findByExample(PagerModel pm) throws SQLException{
Integer count=(Integer)sqlMapper.queryForObject("fTest.findByExampleCount",pm);
List datas=sqlMapper.queryForList("fTest.findByExample",pm);
pm.setDatas(datas);
pm.setTotal(count);
return pm;
}
package com.audit.test;
import java.sql.SQLException;
import com.audit.model.dao.IFTestDAO;
import com.audit.model.dao.impl.FTestDAOImpl;
import com.audit.model.domain.FTest;
import com.audit.util.PagerModel;
import junit.framework.TestCase;
/**
* @author chenpeng
* @file_name TestPagerModel.java
* @create_time 2010-7-28:下午04:55:43
* @email onlychenpeng@msn.com
* 测试分页
*/
public class TestPagerModel extends TestCase {
public void testPager(){
PagerModel pm=new PagerModel();
pm.init(3, 3);
FTest test=new FTest();
test.setTest("test");
pm.setObj(test);
IFTestDAO ftDAO=new FTestDAOImpl();
try {
pm=ftDAO.findByExample(pm);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(null!=pm){
System.out.println("总记录数:"+pm.getTotal());
System.out.println("总页数:"+pm.getTotalPage());
System.out.println("当前页:"+pm.getCurrentPage());
System.out.println("当前页面长度:"+pm.getCurrentSize());
System.out.println("是否存在上一页:"+pm.isHasPre());
System.out.println("是否存在下一页:"+pm.isHasNext());
}
}
}
总页数:7
当前页:1
当前页面长度:3
是否存在上一页:false
是否存在下一页:true