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){
// 調用業務層 , 完成查詢.
PageBean<Product> pageBean = productService.findAllProductByPage(pageNum , pageSize);
// 返回pagebean數據.
model.addAttribute("pageBean" , pageBean);
// 返回視圖名稱 , 進行展示數據.
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("已經到頭了!")
}
}