Mybatis Plus 使用学习二 分页查询

上一节我们通过一个快速demo学习了Mybatis Plus的查询,这节我们来看看人如何实现分页查询。

Mybatis Plus要实现分页要先实现一个分页插件,然后就可以直接应用分页查询了。

1、新建分页插件

package com.itzhimei.mybatis.plus;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@EnableTransactionManagement
@Configuration
@MapperScan("com.itzhimei.mybatis.plus.mapper*")
public class MybatisPlusConfig {

    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 开启 count 的 join 优化,只针对部分 left join
        paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
        return paginationInterceptor;
    }
}

2、分页查询

    @Test
    public void testSelectPage() {
        System.out.println(("----- selectAll method test ------"));
        Page<User> userPage = userMapper.selectPage(new Page<User>(1, 2), null);
        List<User> records = userPage.getRecords();
        records.forEach(System.out::println);
    }

Mybatis Plus 自带的分页方法selectPage,需要传入一个Page类型的对象,用于配置分页信息,第二个参数是配置查询条件,我们这里没有查询条件所以set为null。

Mybatis Plus自带两种分页方法:

/**
     * 根据 entity 条件,查询全部记录(并翻页)
     *
     * @param page         分页查询条件(可以为 RowBounds.DEFAULT)
     * @param queryWrapper 实体对象封装操作类(可以为 null)
     */
    <E extends IPage<T>> E selectPage(E page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

    /**
     * 根据 Wrapper 条件,查询全部记录(并翻页)
     *
     * @param page         分页查询条件
     * @param queryWrapper 实体对象封装操作类
     */
    <E extends IPage<Map<String, Object>>> E selectMapsPage(E page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

区别是:selectPage返回的是对象,selectMapsPage返回的是key-value的map。

输出结果:

==>  Preparing: SELECT COUNT(1) FROM user 
==> Parameters: 
<==    Columns: COUNT(*)
<==        Row: 5
==>  Preparing: SELECT id,name,age,email FROM user limit ? 
==> Parameters: 2(Long)
<==    Columns: ID, NAME, AGE, EMAIL
<==        Row: 1, Jone, 18, test1@baomidou.com
<==        Row: 2, Jack, 20, test2@baomidou.com
<==      Total: 2

上面是打印的日志,从日志可以看出,Mybatis Plus执行了两个sql,一个是统计总记录的sql,一个是查询结果集的sql。