当前位置: 代码网 > it编程>编程语言>Java > MyBatis-Plus分页查询怎么用?selectPage方法详解

MyBatis-Plus分页查询怎么用?selectPage方法详解

2026年07月31日 Java 我要评论
mybatis-plus分页查询首先创建一个数据库表如下图所示:创建一个spring boot项目pom.xml和配置如下:<?xml version="1.0" encoding="utf-8

mybatis-plus分页查询

首先创建一个数据库表

如下图所示:

创建一个spring boot项目

pom.xml和配置如下:

<?xml version="1.0" encoding="utf-8"?>
<project xmlns="http://maven.apache.org/pom/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
         xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelversion>4.0.0</modelversion>
    <groupid>org.kaven</groupid>
    <artifactid>mybatis-plus</artifactid>
    <version>1.0-snapshot</version>
    <parent>
        <groupid>org.springframework.boot</groupid>
        <artifactid>spring-boot-starter-parent</artifactid>
        <version>2.3.4.release</version>
        <relativepath/>
    </parent>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter</artifactid>
        </dependency>
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-test</artifactid>
        </dependency>
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-webflux</artifactid>
        </dependency>
        <dependency>
            <groupid>com.baomidou</groupid>
            <artifactid>mybatis-plus-boot-starter</artifactid>
            <version>3.4.0</version>
        </dependency>
        <dependency>
            <groupid>mysql</groupid>
            <artifactid>mysql-connector-java</artifactid>
            <version>5.1.49</version>
        </dependency>
        <dependency>
            <groupid>org.projectlombok</groupid>
            <artifactid>lombok</artifactid>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupid>org.springframework.boot</groupid>
                <artifactid>spring-boot-maven-plugin</artifactid>
            </plugin>
        </plugins>
    </build>
</project>
spring:
  application:
    name: mybatis-plus
  datasource:
    driver-class-name: com.mysql.jdbc.driver
    username: root
    password: itkaven@123
    url: jdbc:mysql://127.0.0.1:3306/test?characterencoding=utf-8&usessl=false
server:
  port: 8085
logging:
  level:
    root: warn
    com.kaven.mybatisplus.dao: trace
  pattern:
    console: '%p%m%n'
mybatis-plus:
  mapper-locations: classpath:mappers/*.xml

实体类user

package com.kaven.mybatisplus.entity;

import com.baomidou.mybatisplus.annotation.tablefield;
import com.baomidou.mybatisplus.annotation.tableid;
import com.baomidou.mybatisplus.annotation.tablename;
import lombok.data;

@tablename("user")
@data
public class user {

    @tableid
    private string id;

    @tablefield("username")
    private string username;

    @tablefield("password")
    private string password;

    @tablefield("age")
    private integer age;

    /**
     * 使用 @tablefield(exist = false) ,表示该字段在数据库中不存在 ,所以不会插入数据库中
     * 使用 transient 、 static 修饰属性也不会插入数据库中
     */
    @tablefield(exist = false)
    private string phone;
}

mapper接口usermapper

package com.kaven.mybatisplus.dao;

import com.baomidou.mybatisplus.core.mapper.basemapper;
import com.kaven.mybatisplus.entity.user;
import org.springframework.stereotype.component;


@component
public interface usermapper extends basemapper<user> {}

启动类

package com.kaven.mybatisplus;

import org.mybatis.spring.annotation.mapperscan;
import org.springframework.boot.springapplication;
import org.springframework.boot.autoconfigure.springbootapplication;

@springbootapplication
@mapperscan(basepackages = "com.kaven.mybatisplus.dao")
public class apprun {
    public static void main(string[] args) {
        springapplication.run(apprun.class , args);
    }
}

@mapperscan(basepackages = "com.kaven.mybatisplus.dao")这个一定要加上。

我们先在数据库中添加几行数据,方便演示。

为了使用mybatis-plus来实现分页查询

还需要一些配置。

package com.kaven.mybatisplus.config;

import com.baomidou.mybatisplus.annotation.dbtype;
import com.baomidou.mybatisplus.autoconfigure.configurationcustomizer;
import com.baomidou.mybatisplus.extension.plugins.mybatisplusinterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.paginationinnerinterceptor;
import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;

@configuration
public class mybatisplusconfig {

    /**
     * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 mybatisconfiguration#usedeprecatedexecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
     */
    @bean
    public mybatisplusinterceptor mybatisplusinterceptor() {
        mybatisplusinterceptor interceptor = new mybatisplusinterceptor();
        paginationinnerinterceptor paginationinnerinterceptor = new paginationinnerinterceptor();
        paginationinnerinterceptor.setdbtype(dbtype.mysql);
        paginationinnerinterceptor.setoverflow(true);
        interceptor.addinnerinterceptor(paginationinnerinterceptor);
        return interceptor;
    }

    @bean
    public configurationcustomizer configurationcustomizer() {
        return configuration -> configuration.setusedeprecatedexecutor(false);
    }
}

项目结构如下图:

现在来使用一下分页查询方法selectpage()

package com.kaven.mybatisplus.dao;

import com.baomidou.mybatisplus.core.conditions.query.lambdaquerywrapper;
import com.baomidou.mybatisplus.core.metadata.ipage;
import com.baomidou.mybatisplus.core.toolkit.wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.page;
import com.kaven.mybatisplus.entity.user;
import org.junit.test;
import org.junit.runner.runwith;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.boot.test.context.springboottest;
import org.springframework.test.context.junit4.springrunner;



@runwith(springrunner.class)
@springboottest
public class usermapperpagetest {

    @autowired
    private usermapper usermapper;


    @test
    public void selectpage(){
        lambdaquerywrapper<user> userlambdaquerywrapper = wrappers.lambdaquery();
        userlambdaquerywrapper.like(user::getusername , "k");

        page<user> userpage = new page<>(1 , 2);
        ipage<user> useripage = usermapper.selectpage(userpage , userlambdaquerywrapper);
        system.out.println("总页数: "+useripage.getpages());
        system.out.println("总记录数: "+useripage.gettotal());
        useripage.getrecords().foreach(system.out::println);
    }
}

结果如下:

结果是正确的,可以看到该方法执行了两条sql,一条是查询总记录数,一条是查询我们需要的数据。

如果我们并不需要总记录数,查询总记录数就完全没有必要,因为它也需要耗时,其实可以设置不查询总记录数。

package com.kaven.mybatisplus.dao;

import com.baomidou.mybatisplus.core.conditions.query.lambdaquerywrapper;
import com.baomidou.mybatisplus.core.metadata.ipage;
import com.baomidou.mybatisplus.core.toolkit.wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.page;
import com.kaven.mybatisplus.entity.user;
import org.junit.test;
import org.junit.runner.runwith;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.boot.test.context.springboottest;
import org.springframework.test.context.junit4.springrunner;



@runwith(springrunner.class)
@springboottest
public class usermapperpagetest {

    @autowired
    private usermapper usermapper;


    @test
    public void selectpage(){
        lambdaquerywrapper<user> userlambdaquerywrapper = wrappers.lambdaquery();
        userlambdaquerywrapper.like(user::getusername , "k");

        page<user> userpage = new page<>(1 , 2 , false);
        ipage<user> useripage = usermapper.selectpage(userpage , userlambdaquerywrapper);
        system.out.println("总页数: "+useripage.getpages());
        system.out.println("总记录数: "+useripage.gettotal());
        useripage.getrecords().foreach(system.out::println);
    }
}

page<user> userpage = new page<>(1 , 2 , false);在这里设置为false即可。

结果如下:

从上图可以看到只有一条sql,总页数和总记录数都为0,因为我们设置了不需要去查询这些信息。

再来演示一下selectmapspage()的用法。

package com.kaven.mybatisplus.dao;

import com.baomidou.mybatisplus.core.conditions.query.lambdaquerywrapper;
import com.baomidou.mybatisplus.core.conditions.query.querywrapper;
import com.baomidou.mybatisplus.core.metadata.ipage;
import com.baomidou.mybatisplus.core.toolkit.wrappers;
import com.baomidou.mybatisplus.extension.conditions.query.lambdaquerychainwrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.page;
import com.kaven.mybatisplus.entity.user;
import org.junit.test;
import org.junit.runner.runwith;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.boot.test.context.springboottest;
import org.springframework.test.context.junit4.springrunner;

import java.util.hashmap;
import java.util.list;
import java.util.map;


@runwith(springrunner.class)
@springboottest
public class usermapperpagetest {

    @autowired
    private usermapper usermapper;

    @test
    public void selectmapspage(){
        lambdaquerywrapper<user> userlambdaquerywrapper = wrappers.lambdaquery();
        userlambdaquerywrapper.select(user::getusername).like(user::getusername , "k");

        page<map<string , object>> mappage = new page<>(1 , 2 , false);
        ipage<map<string , object>> mapipage = usermapper.selectmapspage(mappage , userlambdaquerywrapper);
        system.out.println("总页数: "+mapipage.getpages());
        system.out.println("总记录数: "+mapipage.gettotal());
        mapipage.getrecords().foreach(system.out::println);
    }
}

结果如下:

结果也是正确的,从用法上也可以看出应用场景。

基于可扩展性,mybatis-plus还可以使用自定义sql的方法来实现分页查询,这样便于多表等复杂条件。

修改usermapper接口:

package com.kaven.mybatisplus.dao;

import com.baomidou.mybatisplus.core.conditions.wrapper;
import com.baomidou.mybatisplus.core.mapper.basemapper;
import com.baomidou.mybatisplus.core.metadata.ipage;
import com.baomidou.mybatisplus.core.toolkit.constants;
import com.kaven.mybatisplus.entity.user;
import org.apache.ibatis.annotations.param;
import org.springframework.stereotype.component;

import java.util.list;


@component
public interface usermapper extends basemapper<user> {
    ipage<user> selectbypage(ipage<user> userpage , @param(constants.wrapper) wrapper<user> userwrapper);
}

usermapper.xml:

<?xml version="1.0" encoding="utf-8" ?>
<!doctype mapper public "-//mybatis.org//dtd mapper 3.0//en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.kaven.mybatisplus.dao.usermapper">
    <select id="selectbypage" resulttype="com.kaven.mybatisplus.entity.user">
        select * from user ${ew.customsqlsegment}
    </select>
</mapper>

也可以使用mybatis的注解来代替xml配置文件(如@select)。

测试代码:

package com.kaven.mybatisplus.dao;

import com.baomidou.mybatisplus.core.conditions.query.lambdaquerywrapper;
import com.baomidou.mybatisplus.core.conditions.query.querywrapper;
import com.baomidou.mybatisplus.core.metadata.ipage;
import com.baomidou.mybatisplus.core.toolkit.wrappers;
import com.baomidou.mybatisplus.extension.conditions.query.lambdaquerychainwrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.page;
import com.kaven.mybatisplus.entity.user;
import org.junit.test;
import org.junit.runner.runwith;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.boot.test.context.springboottest;
import org.springframework.test.context.junit4.springrunner;

import java.util.hashmap;
import java.util.list;
import java.util.map;


@runwith(springrunner.class)
@springboottest
public class usermapperpagetest {

    @autowired
    private usermapper usermapper;

    @test
    public void selectbypage(){
        lambdaquerywrapper<user> userlambdaquerywrapper = wrappers.lambdaquery();
        userlambdaquerywrapper.like(user::getusername , "k");

        page<user> mappage = new page<>(1 , 2 , false);
        ipage<user> mapipage = usermapper.selectbypage(mappage , userlambdaquerywrapper);
        system.out.println("总页数: "+mapipage.getpages());
        system.out.println("总记录数: "+mapipage.gettotal());
        mapipage.getrecords().foreach(system.out::println);
    }
}

结果如下:

结果也是正确的。

使用mybatis-plus来实现分页查询还是挺方便的。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com