欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

如何用pagehelper实现分页

程序员文章站 2024-03-18 13:35:46
...

引言

作为后端开发人员,写分页可谓是基本操作了,各种大大小小的项目都少不了写分页,但是如果自己实现的话,虽然难度不大,但是还是比较繁琐的,而且容易写错,这时候,我们就可以利用前辈大佬造的*了--pagehelper ,pagehelper是一款分页插件,利用它,我们就可以很方便的实现分页,极大的提高我们的开发效率

如何使用

1.引入相关依赖

<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
	<dependency>
	    <groupId>com.github.pagehelper</groupId>
	    <artifactId>pagehelper</artifactId>
	    <version>5.1.0</version>
	</dependency>
	
	<!-- https://mvnrepository.com/artifact/com.github.jsqlparser/jsqlparser -->
	<dependency>
	    <groupId>com.github.jsqlparser</groupId>
	    <artifactId>jsqlparser</artifactId>
	    <version>1.0</version>
	</dependency>

2.在spring-mybatis.xml中配置拦截器插件

<bean id = "sqlSessionFactory" class = "org.mybatis.spring.SqlSessionFactoryBean">
	        <property name="dataSource" ref = "dataSource"/>
		<property name="typeAliasesPackage" value = "com.jay.entity"/>
		<property name="mapperLocations" value = "classpath:com/jay/mapper/*.xml"/>
		<!--分页插件配置  -->
		<property name="plugins">
                <array>
                  <bean class="com.github.pagehelper.PageInterceptor">
                    <property name="properties">
                      <!--使用下面的方式配置参数,一行配置一个 -->
                      <value>
                  	params=value1
                      </value>
                    </property>
                  </bean>
                </array>
              </property>   
</bean>

3.实现在mapper以及mapper.xml中增加查询方法以及语句

public List<Song> query()throws Exception;
<select id = "query" resultType="Song">
		select *from songs
	</select>

4.实现service方法

public List<Song> query() throws Exception{
		List<Song> list = songMapper.query();

		return list;
	}

5.在controller中使用分页

@RequestMapping("queryAll")
	public ModelAndView quereyAll(@RequestParam(required=true, defaultValue = "1")Integer page, @RequestParam(required=false,defaultValue="5")Integer pageSize)throws Exception{
		ModelAndView mlv = new ModelAndView();
		PageHelper.startPage(page, pageSize); //这段代码表示程序开始分页了,从第一页开始,每页显示5条记录
		List<Song> list = songService.query();
		PageInfo<Song> pageInfo = new PageInfo<Song>(list);
			
		mlv.addObject("list", list);
		mlv.addObject("pageInfo", pageInfo);
		mlv.setViewName("/admin/queryAll");

		return mlv;
	}

6.这样,在jsp中使用啦,例如这样

<ul class = "pagination">
  <li> <a href = "queryAll?page=1">首页</a> </li>
	<li <c:if test="${pageInfo.pageNum==1}">class="disabled"</c:if>><a href="queryAll?page=${pageInfo.pageNum-1 }">«</a></li>
            <c:forEach begin="1" end="${pageInfo.size}" step="1" var="pageNo">
	       <li <c:if test="${pageInfo.pageNum==pageNo}">class="active"</c:if>><a href="queryAll?page=${pageNo}">${pageNo}</a></li>
	    </c:forEach>
	<li <c:if test="${pageInfo.pageNum==pageInfo.pages}">class="disabled"</c:if>><a href="queryAll?page=${pageInfo.pageNum+1}">»</a></li>
   <li> <a href = "queryAll?page=${page.pages }">尾页</a> </li>
</ul>

便可以实现如下效果啦

如何用pagehelper实现分页

7.其中PageInfo这个类(不需要我们自己写,在com.github.pagehelper.PageInfo中)中有一些参数,我们需要留意一下

//当前页  
    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 firstPage;  
    //前一页  
    private int prePage;  
  
    //是否为第一页  
    private boolean isFirstPage = false;  
    //是否为最后一页  
    private boolean isLastPage = false;  
    //是否有前一页  
    private boolean hasPreviousPage = false;  
    //是否有下一页  
    private boolean hasNextPage = false;  
    //导航页码数  
    private int navigatePages;  
    //所有导航页号  
    private int[] navigatepageNums;  


相关标签: 分页