基本信息
源码名称:MyBatis分页插件
源码大小:0.08M
文件格式:.zip
开发语言:Java
更新时间:2016-03-24
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 5 元 
   源码介绍

/**
* 拦截后要执行的方法
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public Object intercept(Invocation invocation) throws Throwable {
Object param = invocation.getArgs()[1];
//如果参数为空,直接直接返回
if (null == param) {
return invocation.proceed();
}
//获取分页参数对象
PageVO pageVO = getPageParam(param);
if (null != pageVO) {
//查询符合条件的总记录数
int totalCount = getQueryCount(
(Executor)invocation.getTarget(), (MappedStatement)invocation.getArgs()[0], 
parameter, (RowBounds)invocation.getArgs()[2], (ResultHandler<?>)invocation.getArgs()[3]);
//设置数据总条数
pageVO.setTotalSize(totalCount);
//查询符合条件的分页数据行记录
if (totalCount <= 0) {
return Arrays.asList(new PageResultVO(pageVO, new ArrayList<Object>(0)));
}
return Arrays.asList(new PageResultVO(pageVO, (List<Object>)invocation.proceed()));
}
//返回查询结果
return invocation.proceed();
}

/**
* 获取分页总数据条数

* @param executor
* @param ms
* @param parameter
* @param rowBounds
* @return
*/
protected int getQueryCount(Executor executor, MappedStatement ms, Object param,
RowBounds rowBounds, ResultHandler<?> resultHandler) throws Throwable {
int totalCount = 0;
//查询分页总记录数
List<Object> list = executor.query(
ms.getConfiguration().getMappedStatement(
new StringBuilder(ms.getId()).append(suffix).toString()), 
param, rowBounds, resultHandler);
if (null != list 
&& list.size() == 1) {
totalCount = (Integer)list.get(0);
}
return totalCount;
}

/**
* 获取分页参数

* @param param
* @return
*/
@SuppressWarnings({ "unchecked"})
protected PageVO getPageParam(Object param) {
PageVO pageVO = null;
//如果参数为分页对象则直接返回
if (param instanceof PageVO) {
pageVO = (PageVO)param;
}
//如果参数不是Map对象则直接返回
if(!(param instanceof Map)){
return pageVO;
}
//迭代获取分页对象
ParamMap<Object> paramMap = (ParamMap<Object>)param;
if (null != paramMap) {
for(Iterator<Map.Entry<String, Object>> iterator = paramMap.entrySet().iterator(); iterator.hasNext();){
Map.Entry<String, Object> paramEentry = iterator.next(); 
//获取到分页对象则直接跳出迭代
if (paramEentry.getValue() instanceof PageVO) {
pageVO = (PageVO)paramEentry.getValue();
break;
}
}
}
return pageVO;
}