首先是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;
}
}