MyBatis - 分頁插件PageHelper的快速入門 , 以及SSM整合項目中的使用.

PageHelper

                             是國內非常優秀的一款開源的mybatis分頁插件!
                                   ( 支持任何複雜的單表、多表分頁。 )

它支持基本主流與常用的數據庫,例如mysql、oracle、DB2、SQLite、Hsqldb等。

本文主要使用的是mysqlPageHelper方法的調用!
在這裏插入圖片描述

一、使用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("已經到頭了!")
  	 }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章