• MyBatisPlus(SpringBoot版)的分页插件


    目录

     一、前置工作:

            1.整体项目目录结构

            2.创建普通javamaven项目。

            3.导入依赖,改造成springboot项目

            4.配置启动类

            5.创建service接口及其实现类

           6.创建接口Mapper

            

            7.配置数据源

            8.创建数据库表

    二、使用MP(mybatisplus)的分页插件

    二、使用自定义的分页插件


             MyBatis Plus自带分页插件,只要简单的配置即可实现分页功能。

     一、前置工作:

            1.整体项目目录结构

            2.创建普通javamaven项目。

            3.导入依赖,改造成springboot项目

            依赖:

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5. <modelVersion>4.0.0</modelVersion>
    6. <groupId>com.qcby</groupId>
    7. <artifactId>SpringBootMybatisPlus</artifactId>
    8. <version>1.0-SNAPSHOT</version>
    9. <parent>
    10. <groupId>org.springframework.boot</groupId>
    11. <artifactId>spring-boot-starter-parent</artifactId>
    12. <version>2.4.0</version>
    13. <relativePath/> <!-- lookup parent from repository -->
    14. </parent>
    15. <dependencies>
    16. <dependency>
    17. <groupId>org.springframework.boot</groupId>
    18. <artifactId>spring-boot-starter</artifactId>
    19. </dependency>
    20. <dependency>
    21. <groupId>org.springframework.boot</groupId>
    22. <artifactId>spring-boot-starter-test</artifactId>
    23. <scope>test</scope>
    24. </dependency>
    25. <dependency>
    26. <groupId>com.baomidou</groupId>
    27. <artifactId>mybatis-plus-boot-starter</artifactId>
    28. <version>3.5.1</version>
    29. </dependency>
    30. <dependency>
    31. <groupId>org.projectlombok</groupId>
    32. <artifactId>lombok</artifactId>
    33. <optional>true</optional>
    34. </dependency>
    35. <dependency>
    36. <groupId>mysql</groupId>
    37. <artifactId>mysql-connector-java</artifactId>
    38. <version>5.1.46</version>
    39. <scope>runtime</scope>
    40. </dependency>
    41. </dependencies>
    42. <build>
    43. <plugins>
    44. <plugin>
    45. <groupId>org.springframework.boot</groupId>
    46. <artifactId>spring-boot-maven-plugin</artifactId>
    47. </plugin>
    48. </plugins>
    49. </build>
    50. </project>

            4.配置启动类

    1. package com.qcby;
    2. import org.mybatis.spring.annotation.MapperScan;
    3. import org.springframework.boot.SpringApplication;
    4. import org.springframework.boot.autoconfigure.SpringBootApplication;
    5. @SpringBootApplication
    6. @MapperScan("com.qcby.SpringBoot.mapper")
    7. public class SpringBootApplication1 {
    8. public static void main(String[] args) {
    9. SpringApplication.run(SpringBootApplication1.class, args);
    10. }
    11. }

            5.配置实体类

    1. package com.qcby.SpringBoot.pojo;
    2. import com.baomidou.mybatisplus.annotation.TableName;
    3. import lombok.Data;
    4. @Data
    5. @TableName("t_product")
    6. public class Product {
    7. private Long id;
    8. private String name;
    9. private Integer price;
    10. private Integer version;
    11. }
    1. package com.qcby.SpringBoot.pojo;
    2. import com.baomidou.mybatisplus.annotation.TableId;
    3. import com.baomidou.mybatisplus.annotation.TableLogic;
    4. import com.baomidou.mybatisplus.annotation.TableName;
    5. import lombok.AllArgsConstructor;
    6. import lombok.Data;
    7. import lombok.NoArgsConstructor;
    8. @Data //set和get方法
    9. @AllArgsConstructor //全参构造器
    10. @NoArgsConstructor //无参构造器
    11. @TableName("t_user")
    12. public class User {
    13. //因为用到雪花算法,所以用Long属性
    14. @TableId
    15. private Long id;
    16. private String name;
    17. private Integer age;
    18. private String email;
    19. @TableLogic
    20. private Integer isDeleted;
    21. }

            5.创建service接口及其实现类

    1. package com.qcby.SpringBoot.service;
    2. import com.baomidou.mybatisplus.extension.service.IService;
    3. import com.qcby.SpringBoot.pojo.User;
    4. /**
    5. * UserService继承IService模板提供的基础功能
    6. */
    7. public interface UserService extends IService {
    8. }
    1. package com.qcby.SpringBoot.service.Impl;
    2. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
    3. import com.qcby.SpringBoot.mapper.UserMapper;
    4. import com.qcby.SpringBoot.pojo.User;
    5. import com.qcby.SpringBoot.service.UserService;
    6. import org.springframework.stereotype.Service;
    7. /**
    8. * ServiceImpl实现了IService,提供了IService中基础功能的实现
    9. * 若ServiceImpl无法满足业务需求,则可以使用自定的UserService定义方法,并在实现类中实现
    10. */
    11. @Service
    12. public class UserServiceImpl extends ServiceImpl implements UserService {
    13. }

           6.创建接口Mapper

    1. package com.qcby.SpringBoot.mapper;
    2. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    3. import com.baomidou.mybatisplus.core.metadata.IPage;
    4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    5. import com.qcby.SpringBoot.pojo.User;
    6. import org.apache.ibatis.annotations.Mapper;
    7. import org.apache.ibatis.annotations.Param;
    8. import org.apache.ibatis.annotations.Select;
    9. @Mapper
    10. public interface UserMapper extends BaseMapper {
    11. }

            

    1. package com.qcby.SpringBoot.mapper;
    2. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    3. import com.qcby.SpringBoot.pojo.Product;
    4. import org.apache.ibatis.annotations.Mapper;
    5. @Mapper
    6. public interface ProductMapper extends BaseMapper {
    7. }

            7.配置数据源

            在application.yaml中配置信息。

    1. spring:
    2. # 配置数据源信息
    3. datasource:
    4. # 配置数据源类型
    5. type: com.zaxxer.hikari.HikariDataSource
    6. # 配置连接数据库信息
    7. driver-class-name: com.mysql.jdbc.Driver
    8. url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=false
    9. username: root
    10. password: root
    11. # 配置MyBatis日志
    12. mybatis-plus:
    13. configuration:
    14. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

            8.创建数据库表

    二、使用MP(mybatisplus)的分页插件

            首先要在容器中配置一个mybatisplus分页插件的bean。

            可以自定义一个配置类,也可以在启动类中配置,因为启动类也是一个配置类。

    1. package com.qcby.SpringBoot.config;
    2. import com.baomidou.mybatisplus.annotation.DbType;
    3. import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
    4. import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
    5. import org.springframework.context.annotation.Bean;
    6. import org.springframework.context.annotation.Configuration;
    7. @Configuration
    8. public class MybatisPlusConfig {
    9. /**
    10. * 分页插件
    11. * 构建一个拦截来处理分页
    12. * 每个数据库厂商对于分页的实现语法有差别,因此,在声明该拦截时,需要指定应用的数据库类型
    13. * @return
    14. */
    15. @Bean
    16. public MybatisPlusInterceptor mybatisPlusInterceptor() {
    17. MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    18. interceptor.addInnerInterceptor(new
    19. PaginationInnerInterceptor(DbType.MYSQL));//由于各个数据库的语法会有差别,因此,要指明数据库类型
    20. return interceptor;
    21. }
    22. }

            编写测试类

    1. package com.qcby;
    2. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    3. import com.qcby.SpringBoot.mapper.ProductMapper;
    4. import com.qcby.SpringBoot.mapper.UserMapper;
    5. import com.qcby.SpringBoot.pojo.Product;
    6. import com.qcby.SpringBoot.pojo.User;
    7. import org.junit.jupiter.api.Test;
    8. import org.springframework.beans.factory.annotation.Autowired;
    9. import org.springframework.boot.test.context.SpringBootTest;
    10. import java.util.List;
    11. @SpringBootTest
    12. public class Test2 {
    13. @Autowired
    14. private UserMapper userMapper;
    15. @Autowired
    16. private ProductMapper productMapper;
    17. @Test
    18. public void testPage(){
    19. //设置分页参数
    20. Page page = new Page<>(1, 5);
    21. userMapper.selectPage(page, null);
    22. //获取分页数据
    23. List list = page.getRecords();
    24. list.forEach(System.out::println);
    25. System.out.println("当前页:"+page.getCurrent());
    26. System.out.println("每页显示的条数:"+page.getSize());
    27. System.out.println("总记录数:"+page.getTotal());
    28. System.out.println("总页数:"+page.getPages());
    29. System.out.println("是否有上一页:"+page.hasPrevious());
    30. System.out.println("是否有下一页:"+page.hasNext());
    31. }
    32. }

    二、使用自定义的分页插件

            在usermapper中加入方法

    1. package com.qcby.SpringBoot.mapper;
    2. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    3. import com.baomidou.mybatisplus.core.metadata.IPage;
    4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    5. import com.qcby.SpringBoot.pojo.User;
    6. import org.apache.ibatis.annotations.Mapper;
    7. import org.apache.ibatis.annotations.Param;
    8. import org.apache.ibatis.annotations.Select;
    9. @Mapper
    10. public interface UserMapper extends BaseMapper {
    11. /**
    12. * 根据年龄查询用户列表,分页显示
    13. * @param page 分页对象 ,xml中可以从里面进行取值 ,传递参数 Page 即自动分页 ,必须放在第一位
    14. * @param age 年龄
    15. * @return
    16. */
    17. /**
    18. * 不用加limit语句,因为配置了一个拦截的插件,只需要传入page对象,还是使用的MP的分页插件
    19. * @param page
    20. * @param age
    21. * @return
    22. */
    23. @Select("SELECT id,name,age,email FROM t_user WHERE age > #{age}")
    24. IPage selectPageVo(@Param("page") Page page, @Param("age") Integer age);
    25. }
    1. package com.qcby;
    2. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    3. import com.qcby.SpringBoot.mapper.ProductMapper;
    4. import com.qcby.SpringBoot.mapper.UserMapper;
    5. import com.qcby.SpringBoot.pojo.Product;
    6. import com.qcby.SpringBoot.pojo.User;
    7. import org.junit.jupiter.api.Test;
    8. import org.springframework.beans.factory.annotation.Autowired;
    9. import org.springframework.boot.test.context.SpringBootTest;
    10. import java.util.List;
    11. @SpringBootTest
    12. public class Test2 {
    13. @Autowired
    14. private UserMapper userMapper;
    15. @Autowired
    16. private ProductMapper productMapper;
    17. @Test
    18. public void testSelectPageVo(){
    19. //设置分页参数
    20. Page page = new Page<>(1, 5);
    21. userMapper.selectPageVo(page, 20);
    22. //获取分页数据
    23. List list = page.getRecords();
    24. list.forEach(System.out::println);
    25. System.out.println("当前页:"+page.getCurrent());
    26. System.out.println("每页显示的条数:"+page.getSize());
    27. System.out.println("总记录数:"+page.getTotal());
    28. System.out.println("总页数:"+page.getPages());
    29. System.out.println("是否有上一页:"+page.hasPrevious());
    30. System.out.println("是否有下一页:"+page.hasNext());
    31. }
    32. }
  • 相关阅读:
    AJAX——HttpRequest对象、get/post请求
    【linux命令讲解大全】092.用let命令进行算术计算的Bash内建工具
    javascript 根据数组指定字段值,实现升序/降序
    求职招聘小程序源码系统+社交招聘+多城市招聘 带完整搭建教程
    【PyTorch 攻略 (3/7)】线性组件、激活函数
    python代码规范工具
    【每日一题】ABC301D - Bitmask | 贪心 | 简单
    Linux操作系统——安装RPM包或源码包
    Java 反射机制快速入门及常见方法全归纳。
    网络安全(黑客)自学
  • 原文地址:https://blog.csdn.net/qq_62525547/article/details/136412936