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){
        // 调用业务层 , 完成查询.
        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("已经到头了!")
  	 }
}
发布了107 篇原创文章 · 获赞 173 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/qq_42986107/article/details/84782069