PageHelper是国内一款开源的mybatis分页插件,支持基本主流与常用的数据库,例如mysql、oracle、mariaDB、DB2、SQLite、Hsqldb等。
使用:
第一步:在pom.xml中添加依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
第二步: 在 applicationContext.xml中配置拦截器插件
<!--配置SqlSessionFacory工厂,用来生产代理对象-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 数据库连接池 -->
<property name="dataSource" ref="dataSource"/>
<!-- 传入PageHelper的插件 -->
<property name="plugins">
<array>
<!-- 传入插件的对象 -->
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<props>
<prop key="helperDialect">mysql</prop>
<prop key="reasonable">true</prop>
</props>
</property>
</bean>
</array>
</property>
</bean>
参数:
- helperDialect:分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。
- reasonable:分页合理化参数,默认值为 false 。当该参数设置为 true 时, pageNum<=0 时会查询第一页, pageNum>pages (超过总数时),会查询最后一页。默认 false 时,直接根据参数进行查询。
第三步:在service层如下操作
@Service
@Transactional
public class OrderServiceImpl implements IOrderService {
@Autowired
private IOrderDao orderDao;
@Override
public List<Orders> findAll() throws Exception {
//参数pageNum 是页码值 参数pageSize 代表是每页显示条数
//紧跟着的第一个select方法会被分页
PageHelper.startPage(page, size);
return orderDao.findAll();
}
}
最后修改Controller
@RequestMapping("/findAllPage.do")
public ModelAndView findAllPage(@RequestParam(name = "page",required = true,defaultValue = "1")Integer page,
@RequestParam(name = "pageSize", required = true, defaultValue = "3")Integer pageSize)
throws Exception {
ModelAndView mv = new ModelAndView();
List<Orders> list = orderService.findAllPage(page,pageSize);
PageInfo pageInfo = new PageInfo(list);
mv.addObject("pageInfo",pageInfo);
mv.setViewName("orders-page-list");
return mv;
}
PageInfo 类,他就是一个分页Bean
查看源码:
public class PageInfo<T> implements Serializable {
private static final long serialVersionUID = 1L;
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 prePage;
//下一页
private int nextPage;
//是否为第一页
private boolean isFirstPage = false;
//是否为最后一页
private boolean isLastPage = false;
//是否有前一页
private boolean hasPreviousPage = false;
//是否有下一页
private boolean hasNextPage = false;
//导航页码数
private int navigatePages;
//所有导航页号
private int[] navigatepageNums;
//导航条上的第一页
private int navigateFirstPage;
//导航条上的最后一页
private int navigateLastPage;
.....后面的省略
}
来源:CSDN
作者:Ziwei Xu
链接:https://blog.csdn.net/lameraaa/article/details/104186025