SpringBoot+MyBatis-Plus实现分页的项目实践

 更新时间:2024年11月06日 09:44:13   作者:猿究院-爱吃西红柿  
MyBatis-Plus是基于MyBatis的持久层增强工具,提供简化CRUD、代码生成器、条件构造器、分页及乐观锁等功能,极大简化了开发工作量并提高了开发效率,本文就来介绍一下SpringBoot+MyBatis-Plus实现分页的项目实践,感兴趣的可以了解一下

一、简介

MyBatis-Plus官网:MyBatis-Plus 🚀 为简化开发而生

MyBatis-Plus是一种基于MyBatis框架的强大持久层增强工具,它在MyBatis的基础上提供了许多便捷的功能和增强的特性,用于简化开发。它是一个开源项目,可以与MyBatis无缝集成。

MyBatis-Plus提供了以下主要功能和特性:

  • 简化CRUD操作:提供了通用的Mapper接口和通用的Service接口,通过继承这些接口可以省去大量的编码工作。
  • 代码生成器:可以根据数据库表结构自动生成实体类、Mapper接口和XML映射文件,减少手动编写重复代码的工作量。
  • 条件构造器:提供了方便灵活的条件查询封装,可以通过链式调用的方式构建查询条件。
  • 分页插件:提供了简单易用的分页查询功能,支持多种数据库。
  • 乐观锁插件:为数据库的乐观锁机制提供了便捷的支持。
  • 自动填充插件:为实体类的字段自动填充值。
  • SQL注入器:可以自定义SQL注入方法,增强SQL的灵活性。

总之,MyBatis-Plus是一个功能强大的持久层增强工具,可以大大简化开发,提高开发效率。

二、SpringBoot集成MyBatis-Plus

1.导入依赖包

    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.7</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.33</version>
    </dependency>

2.编写配置文件

spring:
    #配置数据源
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/maven?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useUnicode=true&useSSL=false
    username: root
    password: 123456
mybatis-plus:
  configuration:
    #开启驼峰映射
    map-underscore-to-camel-case: true
    #开启日志,方便观察SQL执行语句
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3.使用注解标识实体类

@TableName(value = "student")//对应数据库表名
@TableId(type = IdType.AUTO)//对应数据库主键,并设置类型为自增
@TableField(value = "id") //对应数据库字段名
@TableField(exist = false)//设置表中不存在的字段
@TableLogic(value = "默认值",delval = "删除后默认值")//逻辑删除时用的字段
@Version//作用:在使用 MyBatis-Plus 乐观锁插件时使用

4.MyBatis-Plus 中用于构建查询条件的方法:

1.eq                 用于设置单个字段的相等条件。

2.allEq            通过一个 Map 来设置多个字段的相等条件

3.ne                 设置单个字段的不相等条件。

4.gt                 设置单个字段的大于条件。

5.ge                 设置单个字段的大于等于条件。

6.lt                 设置单个字段的小于条件。

7.le                 设置单个字段的小于等于条件。

8.between        设置单个字段的 BETWEEN 条件。

9.notBetween   设置单个字段的 NOT BETWEEN 条件。

10.like           设置单个字段的 LIKE 条件。

三、分页实现

1.首先设置分页拦截器作为Spring管理的Bean

package com.apesource.spring_mybatis_plus_01.config;

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;

/**
 * @author 崔世博
 * @version 1.0
 * @since 2024/9/20
 */
@Configuration
public class PageConfig {

    //注入mp拦截器
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        //1.实例化拦截器
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        //2.添加分页拦截器
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mybatisPlusInterceptor;
    }
}

2.Junit测试

(1)查找第一页前三条数据

对应SQL语句:

SELECT stu_id,stu_name,nick_name,stu_age,is_delete FROM student WHERE is_delete=0 LIMIT 3
   @Test
    public void show6() {
        //分页
        Page<Student> page = new Page<Student>();
        //1.定义分页规则
        page.setSize(3);        //页面容量
        page.setCurrent(1);     //当前页码


        Page<Student> studentPage = studentMapper.selectPage(page, null);

        //分页结果
        List<Student> list = studentPage.getRecords();
        System.out.println("总页数:" + studentPage.getPages());
        System.out.println("总记录数:" + studentPage.getTotal());
        list.forEach(System.out::println);

    }

(2)使用QueryWrapper

专门用于构造查询条件,支持基本的等于、不等于、大于、小于等各种常见操作。它允许你以链式调用的方式添加多个查询条件,并且可以组合使用 and 和 or 逻辑。

例子:

找出student表中年龄等于20,分页显示第一页的三条数据

对应SQL语句:

SELECT stu_id,stu_name,nick_name,stu_age,is_delete FROM student WHERE is_delete=0 AND (stu_age = 20) LIMIT 3
    @Test
    public void show6() {
        //分页
        Page<Student> page = new Page<Student>();
        //1.定义分页规则
        page.setSize(3);        //页面容量
        page.setCurrent(1);     //当前页码

        //查询条件(选填)
        QueryWrapper<Student> qr = new QueryWrapper<Student>();
        qr.eq("stu_age", 20);

        Page<Student> studentPage = studentMapper.selectPage(page, qr);

        //分页结果
        List<Student> list = studentPage.getRecords();
        System.out.println("总页数:" + studentPage.getPages());
        System.out.println("总记录数:" + studentPage.getTotal());
        list.forEach(System.out::println);

    }

(3)LambdaQueryWrapper:

这是一个基于 Lambda 表达式的查询条件构造器,它通过 Lambda 表达式来引用实体类的属性,从而避免了硬编码字段名。这种方式提高了代码的可读性和可维护性,尤其是在字段名可能发生变化的情况下。

例子:

找出student表中年龄等于20,分页显示第一页的三条数据

对应SQL语句:

SELECT stu_id,stu_name,nick_name,stu_age,is_delete FROM student WHERE is_delete=0 AND (stu_age > 18) LIMIT 3
   @Test
    public void show6() {
        //分页
        Page<Student> page = new Page<Student>();
        //1.定义分页规则
        page.setSize(3);        //页面容量
        page.setCurrent(1);     //当前页码

        LambdaQueryWrapper<Student> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.gt(Student::getStuAge, 18);

        Page<Student> studentPage = studentMapper.selectPage(page, lambdaQueryWrapper);

        //分页结果
        List<Student> list = studentPage.getRecords();
        System.out.println("总页数:" + studentPage.getPages());
        System.out.println("总记录数:" + studentPage.getTotal());
        list.forEach(System.out::println);

    }

到此这篇关于SpringBoot+MyBatis-Plus实现分页的项目实践的文章就介绍到这了,更多相关SpringBoot MyBatis-Plus分页内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • SpringBoot集成Redis及Redis使用方法

    SpringBoot集成Redis及Redis使用方法

    Redis是现在最受欢迎的NoSQL数据库之一,Redis是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,这篇文章主要介绍了SpringBoot集成Redis及Redis使用方法,需要的朋友可以参考下
    2023-08-08
  • springboot 集成cas5.3 实现sso单点登录详细流程

    springboot 集成cas5.3 实现sso单点登录详细流程

    SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。单点登录是目前比较流行的企业业务整合的解决方案之一,本文给大家介绍springboot 集成cas5.3 实现sso单点登录功能,感兴趣的朋友一起看看吧
    2021-10-10
  • 使用Thrift实现跨语言RPC的调用

    使用Thrift实现跨语言RPC的调用

    Thrift最大的优势就是可以实现跨语言RPC调用,尤其在一些大厂,微服务各模块之间使用不同的语言是很常见的,本文就将使用java作为服务端,用python作为客户端,实现不同语言之间的RPC调用,需要的可以参考下
    2023-10-10
  • Java中Properties类和properties文件示例详解

    Java中Properties类和properties文件示例详解

    在Java中Properties类是用于读取和处理属性文件的类,属性文件是以键值对的形式存储数据的简单文本文件,这篇文章主要介绍了Java中Properties类和properties文件的相关资料,需要的朋友可以参考下
    2025-08-08
  • 关于java数组与字符串相互转换的问题

    关于java数组与字符串相互转换的问题

    这篇文章主要介绍了java数组与字符串相互转换的问题,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • SpringBoot从2.7.x 升级到3.3注意事项

    SpringBoot从2.7.x 升级到3.3注意事项

    从SpringBoot 2.7.x升级到3.3涉及多个重要变更,特别是因为 Spring Boot 3.x 系列基于 Jakarta EE 9,而不再使用 Java EE,本文就来详细的介绍一下,感兴趣的可以了解一下
    2024-09-09
  • MyBatisPlus自定义JsonTypeHandler实现自动转化JSON问题

    MyBatisPlus自定义JsonTypeHandler实现自动转化JSON问题

    这篇文章主要介绍了MyBatisPlus自定义JsonTypeHandler实现自动转化JSON问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Java应用在Linux环境下因权限不足导致异常的解决方法

    Java应用在Linux环境下因权限不足导致异常的解决方法

    在Java应用开发与部署过程中,权限不足导致的异常是开发者经常遇到的“拦路虎”,在Linux系统环境下,Java应用需要对相关文件和目录具备合适的读写执行权限,才能正常运行,所以本文给大家介绍了Java应用在Linux环境下因权限不足导致异常的解决方法,需要的朋友可以参考下
    2025-06-06
  • java项目idea构建总是报内存溢出怎么解决详析

    java项目idea构建总是报内存溢出怎么解决详析

    这篇文章主要介绍了java项目idea构建总是报内存溢出怎么解决的相关资料,方法包括增加IDEA内存分配、调整项目编译设置、配置Gradle构建内存、优化项目结构、清理不必要的依赖、使用命令行构建、更新IDEA和JDK、清理IDEA缓存和禁用不必要的插件,需要的朋友可以参考下
    2025-03-03
  • SpringBoot单机限流的实现

    SpringBoot单机限流的实现

    在系统运维中, 有时候为了避免用户的恶意刷接口, 会加入一定规则的限流,本文主要介绍了SpringBoot单机限流的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08

最新评论