MyBatisPlus分页插件的使用

MyBatisPlus自带分页插件,只需简单的配置就可以实现分页功能。

一、实现一个简单的分页测试功能

1. 引入mybatis-plus依赖

<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>3.5.3.1</version>
</dependency>

2. 创建配置类

在springboot项目的src目录下创建一个config包,包下创建类MyBatisPlusConfig。

  • 添加配置类注解@Configuration
  • 需要扫描mapper接口所在的包(主类中的注解移过来)
  • 配置分页插件(需要注解@Bean)
    配置类代码如下:
package com.example.springboot.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
@MapperScan("com.example.springboot.mapper")
public class MyBatisPlusConfig {
    //配置分页插件
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
   //数据库类型是MySql,因此参数填写DbType.MYSQL
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

3. 创建数据库表及相关实体类

  • 在数据库mybatis_plus中创建表t_user,建表语句如下
CREATE TABLE `t_user` (
  `uid` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `user_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '姓名',
  `age` int DEFAULT NULL COMMENT '年龄',
  `email` varchar(50) DEFAULT NULL COMMENT '邮箱',
  `is_deleted` int DEFAULT '0',
  `sex` int DEFAULT NULL,
  PRIMARY KEY (`uid`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1695430495027957767 DEFAULT CHARSET=utf8mb3;
@TableName(value ="t_user")
@Data
public class User implements Serializable {
	/**
     * 主键ID
     */
	@TableId(type = IdType.AUTO)
	private Long uid;

	/**
     * 姓名
     */
	private String userName;

	/**
     * 年龄
     */
	private Integer age;

	/**
     * 邮箱
     */
	private String email;

	/**
     * 
     */
	private Integer isDeleted;

	/**
     * 
     */
	private Integer sex;

	@TableField(exist = false)
	private static final long serialVersionUID = 1L;
	//...这里省略生成的其他方法
}

使用mybatisx插件生成User实体类、UserMapper接口以及UserMapper.xml映射文件。

4. 创建一个测试类MyBatisPlusTest

  • 在MyBatisPlusTest测试类上添加@SpringBootTest注解
  • 对使用的mapper注解进行注入,使用AutoWired注解
@Autowired
UserMapper userMapper;
  • 编写测试类方法
    userMapper方法里有一个selectPage(),这个方法参数有两个,第一个是Page类型的(分页对象),第二个是Wapper类型的,因此我们创建这两个对象。
    Page类的泛型为我们操作的实体类对象,参数为当前页的页码(current),个每页显示的条数(size),语句为:
    Page<User> page = new Page<>(2,3);
    第二个参数Wapper类型为条件构造器的条件,因为这里查询的是所有数据(即没有条件),所以Wapper类型的数据填null。
    输出page对象,执行可以看到输出的是page的内存地址。
package com.example.springboot;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.springboot.entity.User;
import com.example.springboot.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class MyBatisPlusTest {
    @Autowired
    UserMapper userMapper;

    @Test
    public void testPage() {
        Page<User> page = new Page<>(2, 3);
        userMapper.selectPage(page, null);
        System.out.println(page);
       //page对象为 com.baomidou.mybatisplus.extension.plugins.pagination.Page@c412556
        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());//是否有上一页
    }
}

二、自定义分页功能

任务需求:以用户年龄为条件查询用户信息并分页。
自定义的page方法返回值必须是page。

  • 创建mapper接口
    在接口类UserMapper里创建方法SelectPageByAge,代码如下。
/**
方法返回值仍未Page对象,接受的第一个参数也为Page对象,用来自定义分页信息
**/
Page<User> selectPageByAge(@Param("page") Page<User> page, @Param("age") Integer age);
  • 在UserMapper.xml中编写方法
<select id="selectPageByAge" resultType="User">
    select uid,user_name,age,email
    from t_user where age >= #{age}
</select>
  • 创建测试方法
@Test
public void testPageByAge(){
    Page<User> page = new Page<>(1,3);
    userMapper.selectPageByAge(page,20);//查询年龄大于20岁的记录并分页
    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());//是否有上一页
}

参考文章:

posted @ 2023-10-18 12:18  梦醒时风  阅读(3308)  评论(0编辑  收藏  举报