PageHelper:Mybatis分页插件

余生颓废 提交于 2020-02-05 20:52:57

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;
	.....后面的省略
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!