package com.company.project.common.util; import java.util.List; import java.util.Map; import org.apache.ibatis.session.SqlSession; import org.springframework.util.Assert; import org.springframework.util.ReflectionUtils; import cn.org.rapid_framework.beanutils.PropertyUtils; import cn.org.rapid_framework.page.Page; import cn.org.rapid_framework.page.PageRequest; import cn.org.rapid_framework.util.page.PageList; import cn.org.rapid_framework.util.page.PageQuery; import cn.org.rapid_framework.util.page.Paginator; public class MybatisPageQueryUtils { public static Page pageQuery(SqlSession sqlSession, String statement,PageRequest parameter) { String countStatement = statement + ".count"; PageList pageList = pageQuery(sqlSession, statement, countStatement, parameter, parameter.getPageNumber(), parameter.getPageSize()); Page page = new Page(parameter.getPageNumber(),parameter.getPageSize(),pageList.getTotalItems()); page.setResult(pageList); return page; } public static PageList pageQuery(SqlSession sqlSession, String statement, Object parameter, int pageNo, int pageSize) { String countStatement = statement + ".count"; return pageQuery(sqlSession, statement, countStatement, parameter, pageNo, pageSize); } public static PageList pageQuery(SqlSession sqlSession, String statement, String countStatement, Object parameter, int pageNo, int pageSize) { Assert.isTrue(pageSize > 0,"pageSize > 0 must be true"); Number totalItems = (Number) sqlSession.selectOne(countStatement,parameter); if (totalItems != null && totalItems.intValue() > 0) { Paginator paginator = new Paginator(pageNo, pageSize, totalItems.intValue()); List list = sqlSession.selectList(statement, attachPageQueryVariable(parameter,paginator)); PageList page = new PageList(list,paginator); return page; } return new PageList(0,pageSize,0); } public static Map attachPageQueryVariable(Object parameter,Paginator p) { Map map = toParameterMap(parameter); map.put("startRow", p.getStartRow()); map.put("endRow", p.getEndRow()); map.put("offset", p.getOffset()); map.put("limit", p.getLimit()); return map; } public static Map toParameterMap(Object parameter) { if(parameter instanceof Map) { return (Map)parameter; }else { try { return PropertyUtils.describe(parameter); } catch (Exception e) { ReflectionUtils.handleReflectionException(e); return null; } } } }