GIT项目地址:http://git.oschina.net/free/Mybatis_PageHelper
@RequestMapping("list.html")
public String list(Model model, HttpServletRequest request) {
String sqlId = "menu.mysql.selectMenu";
/ list = MybatisUtils.selectList(sqlId, SpringUtils.getParameter(request));
Page<Object> list = (Page<Object>) MybatisUtils.selectListByPage(sqlId, SpringUtils.getParameter(request));
/ model.addAttribute("list", new PageInfo(list));
model.addAttribute("pageNum", list.getPageNum());
model.addAttribute("pages", list.getPages());
model.addAttribute("list", list);
return "menu/list";
}
@SuppressWarnings("unchecked")
public static <E> List<E> selectListByPage(String sqlId,Object parameter){
Map<String, Object> map = (Map<String, Object>) parameter;
String page = (String) map.get("page");
int pageNum = 1;
if(page != null && page.trim().length() != 0){
pageNum = Integer.parseInt(page);
}
PageHelper.startPage(pageNum, Constant.pageSize, true);
List<Object> result = getSqlSession(sqlId).selectList(sqlId, parameter);
return dealMapResult(result);
}
<c:forEach items="${list}" var="item">
<tr id='<c:out value="${item.menuId}"/>' align="left">
<td><c:out value="${item.parentId}"/></td>
<td><c:out value="${item.menuId}"/></td>
<td><c:out value="${item.menuName}"/></td>
<td><c:out value="${item.url}"/></td>
<td><c:out value="${item.title}"/></td>
<td><c:out value="${item.leaf}"/></td>
<td><c:out value="${item.orderSeq}"/></td>
<td onclick='goEdit(<c:out value="${item.menuId}"/>)'>编辑</td>
<td onclick='doDelete(<c:out value="${item.menuId}"/>)'>删除</td>
</tr>
</c:forEach>
<tfoot>
<tr>
<td colspan="9" align="center" class="p">
<c:if test="${pageNum != 1}">
<a href="list.html?query=a&page=${pageNum - 1}">上一页</a>
</c:if>
<c:if test="${pages != 1}">
<c:forEach var="pageIndex" begin="1" end="${pages}">
<c:choose>
<c:when test="${pageNum == pageIndex}">
<a>${pageIndex}</a>
</c:when>
<c:otherwise>
<a href="list.html?query=a&page=${pageIndex}">${pageIndex}</a>
</c:otherwise>
</c:choose>
</c:forEach>
</c:if>
<c:if test="${pageNum != pages}">
<a href="list.html?query=a&page=${pageNum+1}">下一页</a>
</c:if>
</td>
</tr>
</tfoot>
mybatis-config.xml
<plugins>
<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 4.0.0以后版本可以不设置该参数 -->
<property name="dialect" value="mysql"/>
<!-- 该参数默认为false -->
<!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
<!-- 和startPage中的pageNum效果一样-->
<property name="offsetAsPageNum" value="true"/>
<!-- 该参数默认为false -->
<!-- 设置为true时,使用RowBounds分页会进行count查询 -->
<property name="rowBoundsWithCount" value="true"/>
<!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
<!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)-->
<property name="pageSizeZero" value="true"/>
<!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
<!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
<!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
<property name="reasonable" value="false"/>
<!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
<!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
<!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值 -->
<!-- 不理解该含义的前提下,不要随便复制该配置 -->
<!-- <property name="params" value="pageNum=pageHelperStart;pageSize=pageHelperRows;"/> -->
<!-- 支持通过Mapper接口参数来传递分页参数 -->
<property name="supportMethodsArguments" value="false"/>
<!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page -->
<property name="returnPageInfo" value="none"/>
</plugin>
</plugins>
在BIZ调用查询数据的方法之前(不管是自己写的还是逆向工程生成的),先执行PageHelper.startPage(1, 3);其中1表示当前页码,3表示每页3条记录,返回的Page类继承了ArrayList,并可以获取总记录数。
统一返回值为Page(可以直接按List使用),方便在页面使用EL表达式,如
page.pageNum,
{page.total}
对这种方式使用,一种是如果直接用Page包装list,还要单独get出来,再设置回去model.addAttribute(“pageNum”, list.getPageNum());
第二种是使用PageInfo对list再包装一次,页面就可以直接使用model.addAttribute(“list”, new PageInfo(list));