Apache Torque实现分页查询

来源:互联网 发布:多益网络校园招聘 编辑:程序博客网 时间:2024/05/19 06:16

  • 分页查询工具类
  • 测试类

Apache Torque实现分页查询

Torque的初始化参见Apache Torque连接多个数据库及其使用

1.分页查询工具类

import java.util.List;import org.apache.torque.TorqueException;import org.apache.torque.util.LargeSelectExtend;import com.workingdogs.village.Record;public class TorqueQueryByPageUtils {    private static LargeSelectExtend largeSelect;    /**     * 查询分页结果     * @param isFirstQuery 是否是第一次查询     * @param pageConstant     * @param countSql     * @param querySql     * @param dbName     * @return     */    @SuppressWarnings("unchecked")    public static List<Record> getResultsWithSql(boolean isFirstQuery, PageConstant pageConstant,             String countSql, String querySql, String dbName) {        List<Record> results = null;        try {            int pageSize = pageConstant.getPageSize() <= 0 ? 10 : pageConstant.getPageSize();            /**默认的读入内存的页数,数据读入内存,可以提高前台响应用户请求数据的速度,            但如果读入内存的数据太多,会占用服务器过多内存*/            int memoryPageLimit = pageConstant.getMemoryPageLimit() <= 0 ? 10 : pageConstant.getMemoryPageLimit();            if (isFirstQuery) {                /**使用标准的大查询器查询,标准的大查询器返回的List里都是具体的数据对象的集合*/                largeSelect = new LargeSelectExtend(countSql, querySql, pageSize,                        memoryPageLimit, dbName);                results = largeSelect.getPage(pageConstant.getPageIndex());                largeSelectExtendProperties();                /**数据库里的总页数*/                int realTotalPages = largeSelect.getRealTotalPages();                System.out.println("realTotalPages:"+realTotalPages);            } else {                /**数据库里的总页数*/                int realTotalPages = largeSelect.getRealTotalPages();                System.out.println("realTotalPages:"+realTotalPages);                if (!(pageConstant.getPageIndex() > realTotalPages)) {                    /**获取某页数的结果*/                    results = largeSelect.getPage(pageConstant.getPageIndex());                    largeSelectExtendProperties();                }            }        } catch (TorqueException e) {            e.printStackTrace();        }        return results;    }    @SuppressWarnings("unchecked")    private static void largeSelectExtendProperties() {        try {            /**当前页码数*/            int currentPageNumber = largeSelect.getCurrentPageNumber();            /**读入内存的页数*/            int memoryTotalPages = largeSelect.getMemoryTotalPages();            /**读入内存的总记录数*/            int memoryTotalRecords = largeSelect.getMemoryTotalRecords();            /**数据库实际总记录数*/            int realTotalCount = largeSelect.getRealTotalCount();            /**是否有上一页结果*/            boolean previousResultsAvailable = largeSelect.getPreviousResultsAvailable();            if (previousResultsAvailable) {                /**上一页数据结果*/                List<Record> previousResults = largeSelect.getPreviousResults();                System.out.println("previousResults:"+previousResults);            }            /**是否有下一页结果*/            boolean nextResultsAvailable = largeSelect.getNextResultsAvailable();            if (nextResultsAvailable) {                /**下一页数据结果*/                List<Record> nextResults = largeSelect.getNextResults();                System.out.println("nextResults:"+nextResults);            }            System.out.println("currentPageNumber:"+currentPageNumber);            System.out.println("memoryTotalPages:"+memoryTotalPages);            System.out.println("memoryTotalRecords:"+memoryTotalRecords);            System.out.println("realTotalCount:"+realTotalCount);            System.out.println("previousResultsAvailable:"+previousResultsAvailable);            System.out.println("nextResultsAvailable:"+nextResultsAvailable);        } catch (Exception e) {            e.printStackTrace();        }    }}

注:上述若能执行getPreviousResults(),说明已经翻页到上一页了,那么执行到getNextResultsAvailable()和getNextResults()就是按照上一页的结果进行的,反之亦然,此处只是显示largeSelectExtend的一些属性数据。

思考:上述getResultsWithSql()方法中间部分代码块改写为如下代码,打印出的realTotalPages一直是-1;将休眠的代码注释打开,realTotalPages能正常获取到数值。所以先进行一次页数的查询,就可以正常获取到realTotalPages的数值。

if (isFirstQuery) {    /**使用标准的大查询器查询,标准的大查询器返回的List里都是具体的数据对象的集合*/    largeSelect = new LargeSelectExtend(countSql, querySql, pageSize,            memoryPageLimit, dbName);}//try {//    Thread.sleep(1000);//} catch (InterruptedException e) {//    e.printStackTrace();//}/**数据库里的总页数*/int realTotalPages = largeSelect.getRealTotalPages();System.out.println("realTotalPages:"+realTotalPages);if (!(pageConstant.getPageIndex() > realTotalPages)) {    /**获取某页数的结果*/    results = largeSelect.getPage(pageConstant.getPageIndex());    largeSelectExtendProperties();}
public class PageConstant {    /**     * 页码     */    private int pageIndex;    /**     * 每页包含记录条数     */    private int pageSize;    /**     * 每次读入内存的页数     */    private int memoryPageLimit;    /**     * 已经读入到内存的页数     */    private int memoryTotalPages;    /**     * 下一页     */    private int nextPage;    /**     * 上一页     */    private int previousPage;    /**     * 数据库总记录数     */    private int totalCount;    /**     * 数据库总页数     */    private int totalPages;    /**     * 当前页     */    private int currentPage;    public int getPageIndex() {        return pageIndex;    }    public void setPageIndex(int pageIndex) {        this.pageIndex = pageIndex;    }    public int getPageSize() {        return pageSize;    }    public void setPageSize(int pageSize) {        this.pageSize = pageSize;    }    public int getMemoryPageLimit() {        return memoryPageLimit;    }    public void setMemoryPageLimit(int memoryPageLimit) {        this.memoryPageLimit = memoryPageLimit;    }    public int getMemoryTotalPages() {        return memoryTotalPages;    }    public void setMemoryTotalPages(int memoryTotalPages) {        this.memoryTotalPages = memoryTotalPages;    }    public int getNextPage() {        return nextPage;    }    public void setNextPage(int nextPage) {        this.nextPage = nextPage;    }    public int getPreviousPage() {        return previousPage;    }    public void setPreviousPage(int previousPage) {        this.previousPage = previousPage;    }    public int getTotalCount() {        return totalCount;    }    public void setTotalCount(int totalCount) {        this.totalCount = totalCount;    }    public int getTotalPages() {        return totalPages;    }    public void setTotalPages(int totalPages) {        this.totalPages = totalPages;    }    public int getCurrentPage() {        return currentPage;    }    public void setCurrentPage(int currentPage) {        this.currentPage = currentPage;    }    @Override    public String toString() {        return "PageConstant [pageIndex=" + pageIndex + ", pageSize=" + pageSize + ", memoryPageLimit=" + memoryPageLimit                + ", memoryTotalPages=" + memoryTotalPages + ", nextPage=" + nextPage + ", previousPage=" + previousPage                + ", totalCount=" + totalCount + ", totalPages=" + totalPages + ", currentPage=" + currentPage + "]";    }}

2.测试类

import java.util.Iterator;import java.util.List;import org.apache.torque.Torque;import com.ideal.server.InitServer;import com.workingdogs.village.Record;public class Test {    public static void main(String[] args) {        InitServer.init();        try {            PageConstant pageConstant = new PageConstant();            pageConstant.setPageSize(10);            pageConstant.setMemoryPageLimit(1);            boolean isWhile = true;            List<Record> results = null;            int index = 1;            String countSql = "select count(1) from user where status = 'A'";            String querySql = "select * from user where status = 'A'";            String dbName = Torque.getDefaultDB();            while (isWhile) {                pageConstant.setPageIndex(index);                if (1 == index) {                    results = TorqueQueryByPageUtils.getResultsWithSql(true, pageConstant, countSql, querySql, dbName);                } else {                    results = TorqueQueryByPageUtils.getResultsWithSql(false, pageConstant, countSql, querySql, dbName);                }                if (null == results || results.size() <= 0) {                    isWhile = false;                    break;                } else {                    Iterator<Record> it = results.iterator();                    while (it.hasNext()) {                        Record rc = (Record) it.next();                        //columnName                        String name= rc.getValue("name").toString();                        String password= rc.getValue("password").toString();                        System.out.println(name+":"+password);                    }                }                index = index + 1;            }         } catch (Exception e) {            e.printStackTrace();        }    }}
原创粉丝点击