PageHelper
是国内非常优秀的一款开源的mybatis分页插件!
( 支持任何复杂的单表、多表分页。 )
它支持基本主流与常用的数据库,例如mysql、oracle、DB2、SQLite、Hsqldb等。
本文主要使用的是mysql和PageHelper方法的调用!
一、使用PageHelper的好处?
①使用PageHelper之后我们就可以直接调用dao层查询所有数据!(例: queryAllProductList),
②不需要我们再写 查询分页的数据.( limit 开始索引,PageSize )
查询总条数( select count(*) from 表名 )
二、PageHelper的快速入门.
1.引入分页插件.
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
2.在 MyBatis 主配置 xml 中配置拦截器插件
<!--配置Mybatis的分页插件PageHelper-->
<plugins>
<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 指定PageHelper连接数据库的类型(不同数据库有不同sql语法) -->
<property name="helperDialect" value="mysql"/>
</plugin>
</plugins>
3.PageHelper的快速入门
/**
* 分页助手的快速入门.
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring/applicationContext_dao.xml"})
public class ProductMapperTest {
@Autowired
private ProductMapper productMapper;
@Test
public void test02(){
// 1. 使用分页助手PageHelper设置页码数 和 每页显示的个数.
PageHelper.startPage(1,5);
// 2.调用数据层 , 完成查询所有的商品!
List<Product> productList = productMapper.findAllProduct();
// 3.将查询到的数据封装到PageInfo<T>中!
PageInfo<Product> pageInfo = new PageInfo<>(productList);
// 4. 查询分页其他的数据.
System.out.println("当前页码 :"+pageInfo.getPageNum()); // 获取页码数.
System.out.println("每页显示条数 :"+pageInfo.getPageSize()); // 获取每页个数.
System.out.println("总条数:"+pageInfo.getTotal()); // 获取总条数.
List<Product> list = pageInfo.getList(); // 获取分页显示的数据.
System.out.println("分页显示的数据的大小: "+list.size());
System.out.println("总页数: "+pageInfo.getPages()); // 获取总页数.
}
}
三、SSM整合项目中的应用
1.入口页面.
访问地址:
/product/findAllProductByPageHelper?pageNum=1&pageSize=5
2.controller控制层
@Controller
@RequestMapping("product")
public class ProductController {
@Autowired
private ProductService productService;
/**
* 查询所有的产品信息 , 并进行分页.
*/
@RequestMapping("findAllProductByPage")
public String findAllProductByPage(@RequestParam(value = "pageNum" , defaultValue = "1")int pageNum,
@RequestParam("pageSize")int pageSize,
Model model){
// 调用业务层 , 完成查询.
PageInfo<Product> pageInfo= productService.findAllProductByPageHelper(pageNum , pageSize);
// 返回pagebean数据.
model.addAttribute("pageInfo", pageInfo);
// 返回视图名称 , 进行展示数据.
return "product-list";
}
}
3.service层业务层.
@Override
public PageInfo<Product> findAllProductByPageHelper(int pageNum, int pageSize) {
// 使用分页助手 设置 页码数 和 每页显示个数.
PageHelper.startPage(pageNum, pageSize);
// 调用数据层 , 查询所有的产品!
List<Product> productList = productMapper.findAllProduct();
// 参数传递查询到的产品集合 , 放到PageInfo对象中.
PageInfo<Product> pageInfo = new PageInfo<>(productList);
// 返回!
return pageInfo;
}
4.dao数据层
<mybatis.mapper namespace="com.jxj.mybatis.mapper.ProductMapper">
<!-- 查询所有商品信息 -->
<select id="findAllProduct" resultType="Product">
select * from product
</select>
</mybatis.mapper>
5.分页工具条展示
<div class="box-tools pull-right">
<ul class="pagination">
<li><a href="javaScript:gotoPage('1')" aria-label="Previous">首页</a></li>
<li><a href="javaScript:gotoPage('${pageInfo.pageNum-1}')">上一页</a></li>
<c:forEach begin="1" end="${pageInfo.pages}" var="i" step="1" >
<li class="${i==pageInfo.pageNum ? 'active' : ''}">
<a href="javaScript:gotoPage('${i}')">${i}</a>
</li>
</c:forEach>
<li><a href="javaScript:gotoPage('${pageInfo.pageNum+1}')">下一页</a></li>
<li><a href="javaScript:gotoPage('${pageInfo.total}')" aria-label="Next">尾页</a></li>
</ul>
</div>
// 跳转到指定页面
function gotoPage(pageNum) {
// 获取每页显示的页码.
var numPerPageSelectVal = $("#numPerPageSelect").val();
// 判断页码数 是否在总页码数的范围!
if (pageNum>=1 && pageNum<= ${pageInfo.total}){
// 跳转到指定的页码.
location.href = "${pageContext.request.contextPath}/product/findAllProductByPageHelper?pageNum="+pageNum+"&pageSize="+numPerPageSelectVal;
}else {
alert("已经到头了!")
}
}