oracle 分页查询的方法,以及page实体类

首先是service层

public Response<Paging<VO>> selectB2CPromotionIco(VO vo) {
        Response<Paging<VO>> response = new Response();

        try{
            if(vo != null){
                Paging<VO> paging = new Paging(vo.getPage(),vo.getRows());
                paging.setSearch(vo);
                voManager.selectVO(paging);
                response.setResult(paging);
            }

        }catch(ArgumentException a){
            //参数异常不写log日志
            response.setError(a.getMessage());
        }catch (BusinessException b) {
            response.setError(b.getMessage());
            log.error("查询XXXX信息异常!原因:{}", Throwables.getStackTraceAsString(b));
        } catch (Exception e) {
            response.setError(e.getMessage());
            log.error("查询XXXX信息异常!原因:{}", Throwables.getStackTraceAsString(e));
        }
        return response;
其次是manger层

public void selectVO(Paging<VO> paging){
        paging.setTotal(VOReadDao.selectVOCounts(paging.getSearchMap()));//这个方法是查询总条数
        paging.setData(VOReadDao.selectVO(paging.getSearchMap()));//这个方法是查询分页数据
    }
然后是dao层

//查找图标
    public List<VO> selectVO(Map<String, Object> param);
    //图标总量
    public  Long selectVOCounts(Map<String, Object> param);

然后是mapper层的sql语句

<select id="selectVO" resultMap="VO">
        select * from( select A.*,rownum rn from (
        select
        <include refid="baseColumnList" />
        from VO
        <include refid="selectiveWhere" />  <!-- 如果有order by ,最少写两个参数,有一个参数为主键或者能确定此条记录唯一性的字段,不然容易出现重复数据 -->
        )A
        where rownum <![CDATA[ <  ]]>= #{end})
        where rn>#{offset}
    </select>
    <!--语句-->
    <select id="selectVOCounts" resultType="long">
        select count(1)
        from VO
        <include refid="selectiveWhere" />
    </select>

最后就是最主要的paging的实体类了

package com.util.person.entity;

import java.beans.PropertyDescriptor;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 分页方法
 *
 * @param <T>
 */
public class Paging<T> implements Serializable {


    private static Integer defaultSize = 20;
    private long total;
    private List<T> data;
    private Map<String, Object> searchMap;
    private Object search;
    private Integer pageNo;
    private Integer size;
    private T totalColum; //add by zhaomeinan

    private Paging() {
    }

    private void init() {
        total = 0L;
        data = new ArrayList<T>();
        searchMap = new HashMap<String, Object>();
    }


    public Paging(Integer pageNo) {
        init();
        setPageNo(pageNo);
        setSize(defaultSize);
    }

    public Paging(Integer pageNo, Integer size) {
        init();
        setPageNo(pageNo);
        if (size == null) {
            setSize(defaultSize);
        } else {
            this.setSize(size);
        }
    }

    public Paging(long total, List<T> rows) {
        this.total = total;
        this.data = rows;
    }

    public void setTotal(long total) {
        this.total = total;
    }

    public long getTotal() {
        return total;
    }

    public void setData(List<T> data) {
        this.data = data;
    }

    public List<T> getData() {
        return data;
    }

    public Map<String, Object> getSearchMap() {
        return searchMap;
    }

    public Paging<T> putSearch(String key, Object val) {
        searchMap.put(key, val);
        return this;
    }

    public Object getSearch() {
        return search;
    }

    public void setSearch(Object search) {
        if (search == null) {
            return;
        }
        Field[] fields = search.getClass().getDeclaredFields();

        for (Field field : fields) {
            try {
                PropertyDescriptor propertyDescriptor = new PropertyDescriptor(field.getName(), search.getClass());
                Object value = propertyDescriptor.getReadMethod().invoke(search);
                if (value != null) {
                    searchMap.put(field.getName(), propertyDescriptor.getReadMethod().invoke(search));
                }
            } catch (Exception e) {
                e.fillInStackTrace();
            }
        }
        this.search = search;
    }

    public void setSize(Integer size) {
        this.size = size;
        searchMap.put("offset", (this.pageNo - 1) * size);
        searchMap.put("limit", size);
        searchMap.put("end", this.pageNo * size);
    }

    public Integer getSize() {
        return this.size;
    }

    public void setPageNo(Integer pageNo) {
        this.pageNo = pageNo == null ? 1 : pageNo;
    }

    public Integer getPageNo() {
        return pageNo;
    }

    public static <T> Paging<T> empty(Class<T> clazz) {
        List emptyList = Collections.emptyList();
        return new Paging(Long.valueOf(0L), emptyList);
    }

    public T getTotalColum() {
        return totalColum;  
    }

    public void setTotalColum(T totalColum) {
        this.totalColum = totalColum; 
    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值