ssm中pageHelper的使用
1.首先导入PageHelper依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
2.在spring与mybatis的整合配置文件中sqlSessionFactoryBean,添加配置
<bean id="SqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="myDataSource"/>
<property name="configLocation" value="classpath:mybatis.xml"/>
<property name="plugins">
<set>
<!--配置pageHelper 分页插件-->
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<props>
<!--方言:-->
<prop key="helperDialect">mysql</prop>
</props>
</property>
</bean>
</set>
</property>
</bean>
3.在想要查询的方法上使用
- 一定要在查询方法的前一步使用PageHelper.startPage(首页,页面大小)
- 想要使用页面的信息时使用pageInfo
- PageInfo<实体类> pageInfo = new PageInfo<>(数据库中获取到的信息)
- 传给前台
- 在mybatis中不用写limit
controller
@RequestMapping("/productByCategory")
public String productByCategory(@RequestParam(defaultValue = "1") int pageIndex, String category, Model model){
PageHelper.startPage(pageIndex,1);
List<Product> products = productService.selectByCategory(category);
PageInfo<Product> pageInfo = new PageInfo<>(products);
model.addAttribute("products",products);
model.addAttribute("pageInfo",pageInfo);
model.addAttribute("category",category);
return "/client/product_list.jsp";
}
service
List<Product> selectByCategory(String category);
@Override
public List<Product> selectByCategory(String category) {
return productDao.selectByCategory(category);
}
dao
List<Product> selectByCategory(@Param("category") String category);
<select id="selectByCategory" resultType="Product">
select * from products
<where>
<if test="category!=null and category!=''">
category = #{category}
</if>
</where>
</select>
前台页面
<c:if test="${pageInfo.pageNum!=1}">
<li class="nextPage">
<a href="${pageContext.request.contextPath}/client/product/productByCategory?pageIndex=${pageInfo.pageNum-1}&category=${category}"><<上一页</a>
</li>
</c:if>
<c:if test="${pageInfo.pageNum==1}">
<li class="disablepage"><<上一页</li>
</c:if>
<c:forEach begin="1" end="${pageInfo.pages}" var="pageNum">
<c:if test="${pageNum==pageInfo.pageNum}">
<li class="currentpage">${pageNum }</li>
</c:if>
<c:if test="${pageNum!=pageInfo.pageNum}">
<li><a href="${pageContext.request.contextPath}/client/product/productByCategory?pageIndex=${pageNum}&category=${category}">${pageNum}</a>
</li>
</c:if>
</c:forEach>
<c:if test="${pageInfo.pageNum==pageInfo.pages||pageInfo.pages==0}">
<li class="disablepage">下一页 >></li>
</c:if>
<c:if test="${pageInfo.pageNum!=pageInfo.pages&&pageInfo.pages!=0}">
<li class="nextpage">
<a href="${pageContext.request.contextPath}/client/product/productByCategory?pageIndex=${pageInfo.pageNum+1}&category=${category}">下一页>></a>
</li>
</c:if>
pageInfo里的内容
public class PageInfo<T> implements Serializable {
private static final long serialVersionUID = 1L;
//当前页
private int pageNum;
//每页的数量
private int pageSize;
//当前页的数量
private int size;
//由于startRow 和endRow 不常用,这里说个具体的用法
//可以在页面中"显示startRow 到endRow 共size 条数据"
//当前页面第一个元素在数据库中的行号
private int startRow;
//当前页面最后一个元素在数据库中的行号
private int endRow;
//总记录数
private long total;
//总页数
private int pages;
//结果集
private List<T> list;
//前一页
private int prePage;
//下一页
private int nextPage;
//是否为第一页
private boolean isFirstPage = false;
//是否为最后一页
private boolean isLastPage = false;
//是否有前一页
private boolean hasPreviousPage = false;
//是否有下一页
private boolean hasNextPage = false;
//导航页码数
private int navigatePages;
//所有导航页号
private int[] navigatepageNums;
//导航条上的第一页
private int navigateFirstPage;
//导航条上的最后一页
private int navigateLastPage;
}