MyBatis-Plus分页插件的配置和使用

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MyBatis-Plus分页插件的配置和使用

1.0 MyBatis-Plus分页插件的配置和使用)

MyBatis Plus自带的分页插件,只要简单的配置节课实现分页的功能;

1.1 添加配置类

由于版本的区别更换版本如下:此前版本无法引用MybatisPlusInterceptor 故更换使用3.5.1

<!--        <dependency>-->
<!--            <groupId>com.baomidou</groupId>-->
<!--            <artifactId>mybatis-plus-boot-starter</artifactId>-->
<!--            <version>3.3.1</version>-->
<!--        </dependency>-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>

package com.example.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
//地址指向mappe层 持久层也就是Dao接口
@MapperScan("com.example.mapper")
public class MyBatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        //调用的mybatis的分页拦截器
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //我们在此选择数据库的类型,也有其他的参数 我这边选择的mysql
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

查看数据库类型 DbType.(MYSQL)

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package com.baomidou.mybatisplus.annotation;
public enum DbType {
    MYSQL("mysql", "MySql数据库"),
    MARIADB("mariadb", "MariaDB数据库"),
    ORACLE("oracle", "Oracle11g及以下数据库(高版本推荐使用ORACLE_NEW)"),
    ORACLE_12C("oracle12c", "Oracle12c+数据库"),
    DB2("db2", "DB2数据库"),
    H2("h2", "H2数据库"),
    HSQL("hsql", "HSQL数据库"),
    SQLITE("sqlite", "SQLite数据库"),
    POSTGRE_SQL("postgresql", "Postgre数据库"),
    SQL_SERVER2005("sqlserver2005", "SQLServer2005数据库"),
    SQL_SERVER("sqlserver", "SQLServer数据库"),
    DM("dm", "达梦数据库"),
    XU_GU("xugu", "虚谷数据库"),
    KINGBASE_ES("kingbasees", "人大金仓数据库"),
    PHOENIX("phoenix", "Phoenix HBase数据库"),
    GAUSS("zenith", "Gauss 数据库"),
    CLICK_HOUSE("clickhouse", "clickhouse 数据库"),
    GBASE("gbase", "南大通用(华库)数据库"),
    GBASEDBT("gbasedbt", "南大通用数据库"),
    OSCAR("oscar", "神通数据库"),
    SYBASE("sybase", "Sybase ASE 数据库"),
    OCEAN_BASE("oceanbase", "OceanBase 数据库"),
    FIREBIRD("Firebird", "Firebird 数据库"),
    HIGH_GO("highgo", "瀚高数据库"),
    CUBRID("cubrid", "CUBRID数据库"),
    GOLDILOCKS("goldilocks", "GOLDILOCKS数据库"),
    CSIIDB("csiidb", "CSIIDB数据库"),
    SAP_HANA("hana", "SAP_HANA数据库"),
    IMPALA("impala", "impala数据库"),
    OTHER("other", "其他数据库");
    private final String db;
    private final String desc;
    public static DbType getDbType(String dbType) {
        DbType[] var1 = values();
        int var2 = var1.length;
        for(int var3 = 0; var3 < var2; ++var3) {
            DbType type = var1[var3];
            if (type.db.equalsIgnoreCase(dbType)) {
                return type;
            }
        }
        return OTHER;
    }
    public String getDb() {
        return this.db;
    }
    public String getDesc() {
        return this.desc;
    }
    private DbType(final String db, final String desc) {
        this.db = db;
        this.desc = desc;
    }
}

1.2 对分页功能点进行测试

package com.example;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.mapper.UserMapper;
import com.example.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class MybatisPlusPage {
    @Autowired
    public UserMapper userMapper;
    @Test
    public void  testpage(){
        // 实体类作为对象
        //默认参数第几页?每页几行?
         Page<User> page = new Page<>(1,3);
         userMapper.selectPage(page,null);
         System.out.println(page);
    }
}

执行结果为:

默认是第一页故我们后端传入的第一页每页3行,后端只验证3行对应 LIMIT ? 故每页3行数据;

==>  Preparing: SELECT uid AS id,user_name AS name,age,email,is_delect FROM t_user WHERE is_delect=0 LIMIT ?
==> Parameters: 3(Long)
<==    Columns: id, name, age, email, is_delect
<==        Row: 4, 我是老王, 18, test4@baomidou.com, 0
<==        Row: 5, Billie, 10, test5@baomidou.com, 0
<==        Row: 6, 老王, 10, 757631644001, 0
<==      Total: 3

当我们更换为第二页,每页3行数据的时候看下图;

LIMIT ? ,? 为2个参数第一个计算规则为 2-1后得出1*3=3;第二数据就是每页3行数据;

结果如下:

<==    Columns: total
<==        Row: 10
<==      Total: 1
==>  Preparing: SELECT uid AS id,user_name AS name,age,email,is_delect FROM t_user WHERE is_delect=0 LIMIT ?,?
==> Parameters: 3(Long), 3(Long)
<==    Columns: id, name, age, email, is_delect
<==        Row: 7, 老王超1, 10, 757631644111, 0
<==        Row: 8, 闫文超2, 10, 757631644221, 0
<==        Row: 9, 闫文超3, 10, 757631644331, 0
<==      Total: 3

1.3 对分页功能点进行测试

在这里插入图片描述

@Test
    public void  testpage(){
        // 实体类作为对象
        //默认参数第几页?每页几行?
         Page<User> page = new Page<>(3,2);
         userMapper.selectPage(page,null);
         System.out.println("获取当前页数据"+page.getRecords());
        System.out.println("获取总页数"+page.getPages());
        System.out.println("获取数据总条数"+page.getTotal());
        System.out.println("是否有上一页"+page.hasNext());
        System.out.println("是否有下一页"+page.hasPrevious());
        System.out.println("---");
        System.out.println("返回: 此对象的哈希码值"+page.hashCode());
        System.out.println("当前是第几页"+page.getCurrent());
        System.out.println("每页几条数据"+page.getSize());
    }

测试数据如下:

<==    Columns: total
<==        Row: 10
<==      Total: 1
==>  Preparing: SELECT uid AS id,user_name AS name,age,email,is_delect FROM t_user WHERE is_delect=0 LIMIT ?,?
==> Parameters: 4(Long), 2(Long)
<==    Columns: id, name, age, email, is_delect
<==        Row: 8, 闫文超2, 10, 757631644221, 0
<==        Row: 9, 闫文超3, 10, 757631644331, 0
<==      Total: 2
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@76db540e]
获取当前页数据[User(id=8, name=闫文超2, age=10, email=757631644221, isDelect=0), User(id=9, name=闫文超3, age=10, email=757631644331, isDelect=0)]
获取总页数5
获取数据总条数10
是否有上一页true
是否有下一页true
---
返回: 此对象的哈希码值722321959
当前是第几页3
每页几条数据2

2.0 自定义分页Demo

package com.example.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.pojo.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
//继承 BaseMapper<实体类> 即可调用crud方法
//标记持久层组件
@Repository
public interface UserMapper extends BaseMapper<User> {
    /**
     * 根据年龄查询用户列表,分页显示
     * @param page 分页对象,xml中可以从里面进行取值,传递参数 Page 即自动分页,必须放在第一位
     * @param age 年龄
     * @return
     */
Page<User> selectpageVo(@Param("page") Page<User> page,@Param("age") Integer age);
}

<?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.example.mapper.UserMapper">
    <sql id="File_Column_List" >
        uid,user_name,age,email
    </sql>
    <select id="selectpageVo" resultType="User">
       select <include refid="File_Column_List"/>
from t_user where age >#{age}
    </select>
</mapper>

下面这个配置是对应xml中resultType 返回对象的值;就行配置

spring:
  # 配置数据源信息
  datasource:
    #配置数据源类型
    type: com.zaxxer.hikari.HikariDataSource
    #配置连接数据的信息
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&userSSL=false
    username: root
    password: root
mybatis-plus:
  configuration:
    #加入mybatis 日志查看执行语句sql语句
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      table-prefix: t_
      #设置统一的主键生成策略
      id-type: auto
     #配置实体类类型别名对应的包(也就是实体类和mapper.xml的返回的对象对应)
  type-aliases-package: com.example.pojo

测试类

@Test
    public void  testpage01(){
        // 实体类作为对象
        //默认参数第几页?每页几行?
        Page<User> page = new Page<>(2,2);
        userMapper.selectpageVo(page,10);
        System.out.println("page"+page);
    }

执行结果如下

==>  Preparing: SELECT COUNT(*) AS total FROM t_user WHERE age > ?
==> Parameters: 10(Integer)
<==    Columns: total
<==        Row: 9
<==      Total: 1
==>  Preparing: select uid,user_name,age,email from t_user where age >? LIMIT ?,?
==> Parameters: 10(Integer), 2(Long), 2(Long)
<==    Columns: uid, user_name, age, email
<==        Row: 4, 我是老王, 18, test4@baomidou.com
<==        Row: 10, 闫文超4, 14, 757631644441
<==      Total: 2

MyBatis-Plus分页插件的配置和使用到这里就暂时结束了;


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
1月前
|
XML Java 数据库连接
MyBatis的常见配置
MyBatis 常见配置包括数据库连接、类型别名、映射器等核心模块,合理配置可提升开发效率与系统性能。主要内容涵盖核心配置文件结构、关键配置项详解及配置优先级说明。
233 4
|
1月前
|
SQL Java 数据库连接
MyBatis分页
MyBatis作为Java持久层框架,需结合数据库特性或插件实现分页。分页分为物理分页(如MySQL的LIMIT)和逻辑分页(内存截取),推荐使用PageHelper插件自动注入分页语句,提升开发效率与性能。需注意索引优化、深分页问题及多表关联时的兼容性,结合业务场景选择合适方案。
103 4
|
2月前
|
SQL XML Java
通过MyBatis的XML配置实现灵活的动态SQL查询
总结而言,通过MyBatis的XML配置实现灵活的动态SQL查询,可以让开发者以声明式的方式构建SQL语句,既保证了SQL操作的灵活性,又简化了代码的复杂度。这种方式可以显著提高数据库操作的效率和代码的可维护性。
217 18
|
7月前
|
Oracle 关系型数据库 Java
【YashanDB知识库】Mybatis-Plus适配崖山配置
【YashanDB知识库】Mybatis-Plus适配崖山配置
|
7月前
|
SQL Java 数据库连接
微服务——MyBatis分页
本文介绍了分页的多种实现方式,包括自带RowBounds分页、第三方插件PageHelper分页、SQL分页、数组分页及拦截器分页。其中,RowBounds是先查询全部结果再内存分页;PageHelper通过修改SQL动态添加分页关键字;SQL分页依赖数据库自身的分页功能如`LIMIT`;数组分页则是查询全量数据后用`subList`方法截取;拦截器分页则统一在SQL后添加分页语句。最后总结逻辑分页适合小数据量,但大数据量易内存溢出;物理分页虽小数据量效率较低,但更适合大数据场景,优先推荐使用。
100 0
|
7月前
|
Java 数据库连接 微服务
微服务——MyBatis配置——事务管理
本段内容主要介绍了事务管理的两种类型:JDBC 和 MANAGED。JDBC 类型直接利用数据源连接管理事务,依赖提交和回滚机制;而 MANAGED 类型则由容器全程管理事务生命周期,例如 JEE 应用服务器上下文,默认会关闭连接,但可根据需要设置 `closeConnection` 属性为 false 阻止关闭行为。此外,提到在使用 Spring + MyBatis 时,无需额外配置事务管理器,因为 Spring 模块自带的功能可覆盖上述配置,且这两种事务管理器类型均无需设置属性。
111 0
|
7月前
|
Java 数据库连接 数据库
微服务——MyBatis配置——多环境配置
在 MyBatis 中,多环境配置允许为不同数据库创建多个 SqlSessionFactory。通过传递环境参数给 SqlSessionFactoryBuilder,可指定使用哪种环境;若忽略,则加载默认环境。`environments` 元素定义环境配置,包括默认环境 ID、事务管理器和数据源类型等。每个环境需唯一标识,确保默认环境匹配其中之一。代码示例展示了如何构建工厂及配置 XML 结构。
118 0
|
4月前
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
788 1
Spring boot 使用mybatis generator 自动生成代码插件
|
5月前
|
SQL Java 数据安全/隐私保护
发现问题:Mybatis-plus的分页总数为0,分页功能失效,以及多租户插件的使用。
总的来说,使用 Mybatis-plus 确实可以极大地方便我们的开发,但也需要我们理解其工作原理,掌握如何合适地使用各种插件。分页插件和多租户插件是其中典型,它们的运用可以让我们的代码更为简洁、高效,理解和掌握好它们的用法对我们的开发过程有着极其重要的意义。
583 15
|
7月前
|
Java 数据库连接 数据库
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——MyBatis 介绍和配置
本文介绍了Spring Boot集成MyBatis的方法,重点讲解基于注解的方式。首先简述MyBatis作为持久层框架的特点,接着说明集成时的依赖导入,包括`mybatis-spring-boot-starter`和MySQL连接器。随后详细展示了`properties.yml`配置文件的内容,涵盖数据库连接、驼峰命名规范及Mapper文件路径等关键设置,帮助开发者快速上手Spring Boot与MyBatis的整合开发。
1000 0