PageHelper

MyBatis通过PageHelper插件进行分页管理

首先

在在pom.xml文件中引入依赖

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>最新版本</version>
</dependency>

这是PageHelper的坐标

这是springboot的PageHelper启动器坐标

 

接着:

配置拦截器,特别注意,新版拦截器是 com.github.pagehelper.PageInterceptor com.github.pagehelper.PageHelper

在是一个特殊的 dialect 实现类,是分页插件的默认实现类,提供了和以前相同的用法。其底层是利用了filter器的原理。

1. 如果你单纯使用Mybatis进行分页,则需要在Mybatis-config.xml文件中配置

<!--
    plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:
    properties?, settings?,
    typeAliases?, typeHandlers?,
    objectFactory?,objectWrapperFactory?,
    plugins?,
    environments?, databaseIdProvider?, mappers?
-->
<plugins>
    <!-- com.github.pagehelper为PageHelper类所在包名 -->
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
        <!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
        <property name="param1" value="value1"/>
    </plugin>
</plugins>

2. 如果你通过Spring来管理MyBatis时,你需要在创建sqlSessionFactory的bean时,在这个里面使用 spring 的属性配置方式,可以使用 plugins 属性像下面这样配置:

 <!-- 把交给IOC管理 SqlSessionFactory -->
    <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>

部分参数:

params :为了支持 startPage(Object params) 方法,增加了该参数来配置参数映射,用于从对象中根据属

性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable ,不配置映射的用默认值, 默认

值为 pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero

helperDialect 分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。 你可以配置

helperDialect 属性来指定分页插件使用哪种方言。配置时,可以使用下面的缩写值:

oracle , mysql , mariadb , sqlite , hsqldb , postgresql , db2 , sqlserver , informix , h2 , sqlserver2012 , derby

reasonable 分页合理化参数,默认值为 false 。当该参数设置为 true 时, pageNum<=0 时会查询第一

页, pageNum>pages (超过总数时),会查询最后一页。默认 false 时,直接根据参数进行查询。

PageHelper.startPage 静态方法调用(重点)

这种方式是我们要掌握的 在你需要进行分页的 MyBatis 查询方法前调用PageHelper.startPage 静态方法即可,紧

跟在这个方法后的第一个MyBatis 查询方法会被进行分页。

//获取第1页,10条内容,默认查询总数count
PageHelper.startPage(1, 10);
//紧跟着的第一个select方法会被分页
List<Country> list = countryMapper.selectIf(1);

特别注意:

使用这种方法必须将PageHelper.startPage(1,10)紧写在查询语句的上一句,之间不能有任何语句,这样就完成了使用PageHelper完成了分页操作

在控制层Controller里,通过PageInfo对象封装从数据库中获取到的数据,然后在前端页面进行展示

@Controller
@RequestMapping("/orders")
public class OrdersController {

    @Autowired
    private IOrdersService orderService;

    @RequestMapping("/findAll.do")
    public ModelAndView findAll(@RequestParam(name = "page", required = true, defaultValue = "1") int page, @RequestParam(name = "size", required = true, defaultValue = "4") int size) throws Exception {
        ModelAndView mv = new ModelAndView();
        List<Orders> ordersList = orderService.findAllByPage(page, size);
        //PageInfo就是一个分页Bean
        PageInfo pageInfo = new PageInfo(ordersList);
        mv.addObject("pageInfo", pageInfo);
        mv.setViewName("orders-page-list");
        return mv;
    }
}

PageInfo有以下的属性:

public class PageInfo<T> implements Serializable {

    //当前页
    private int pageNum;
    //每页的数量
    private int pageSize;
    //当前页的数量
    private int 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;
    private boolean isLastPage;
    private boolean hasPreviousPage;
    private boolean hasNextPage;
    //导航页码数
    private int navigatePages;
    public PageInfo() {
        this.isFirstPage = false;
        this.isLastPage = false;
        this.hasPreviousPage = false;
        this.hasNextPage = false;
    }
    public PageInfo(List<T> list) {
        this(list, 8);
    }
    /**
     *  略
    */

这是PageInfo源码中的部分参数

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值