MybatisPlus-插件篇

文章目录

  • 一、前言
  • 二、插件
    • 1、分页插件
      • 2.1.1、引入依赖
      • 2.1.1、配置分页插件
      • 2.1.3、使用分页方法
    • 2、乐观锁插件
      • 2.1、引入依赖
      • 2.2、添加版本字段
      • 2.3、配置乐观锁插件
      • 2.4、执行更新操作
  • 三、总结

一、前言

本文将详细介绍mybatisplus中常用插件的使用。

二、插件

1、分页插件

分页查询在实际应用中非常常见,它允许我们从数据库中检索大量数据时,将结果分成若干页显示,以提高用户体验并减轻数据库负担。Mybatis-Plus的分页插件就是为了解决这个问题而设计的,它能够让我们以更简单的方式进行分页查询。
官方对Page类的说明:
在这里插入图片描述

以下是Mybatis-Plus分页插件的详细介绍:

2.1.1、引入依赖

  1. 引入依赖: 首先,你需要在项目中引入Mybatis-Plus的相关依赖,包括核心依赖以及分页插件的依赖。
<!-- Mybatis-Plus 依赖 -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>最新版本</version>
</dependency>

2.1.1、配置分页插件

  1. 配置分页插件: 在Mybatis-Plus的配置文件中,需要配置分页插件。一般来说,你需要创建一个PaginationInterceptor的实例,并将其添加到Mybatis的插件列表中。这个插件会在执行数据库查询时自动处理分页逻辑。
mybatis-plus:configuration:# 配置数据库字段下划线转驼峰命名规则map-underscore-to-camel-case: true# 分页插件配置plugin:pagination:dialect: mysql # 指定数据库方言,支持的数据库有很多,这里以 MySQL 为例

2.1.3、使用分页方法

  1. 使用分页方法: Mybatis-Plus提供了一些内置的分页方法,可以直接在Mapper接口中使用。这些方法包括:

    • selectPage(Page<T> page, Wrapper<T> queryWrapper): 根据查询条件进行分页查询,并将结果封装到Page对象中。
    • selectMapsPage(Page<T> page, Wrapper<T> queryWrapper): 类似于上述方法,但返回的是一个分页的Map列表,每个Map代表一行记录。
  2. 分页参数: 分页查询需要指定当前页数和每页显示的记录数。Mybatis-Plus的分页方法中,通常会传入一个Page对象,你可以在该对象中设置这些参数。

  3. 分页结果: 分页查询的结果会被封装到Page对象中,该对象除了包含查询结果的列表外,还包含了分页相关的元数据,如总记录数、总页数、当前页码等。

总体而言,Mybatis-Plus的分页插件使得分页查询变得更加方便和简单。你不再需要手动编写分页查询的SQL语句,只需要调用相应的分页方法,传入分页参数和查询条件即可。

以下是一个使用Mybatis-Plus分页插件的简单示例:

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;public class UserService {@Autowiredprivate UserMapper userMapper;public Page<User> getUserListByPage(int pageNum, int pageSize) {Page<User> page = new Page<>(pageNum, pageSize);QueryWrapper<User> queryWrapper = new QueryWrapper<>();// 设置查询条件...return userMapper.selectPage(page, queryWrapper);}
}

在这个示例中,UserMapper是一个继承了Mybatis-Plus的BaseMapper接口的接口,它继承了一些基本的查询方法,包括分页方法。

需要注意的是,Mybatis-Plus的版本可能会有更新,因此具体的用法可能会有所变化。建议查阅官方文档或者示例代码以获取最新的用法信息。

2、乐观锁插件

乐观锁是一种用于处理数据库并发访问的策略,它不会锁住整个数据行,而是在更新时检查数据版本,如果版本号匹配,则允许更新操作;如果版本号不匹配,则说明数据已经被其他事务修改,更新操作将被拒绝。

2.1、引入依赖

  1. 引入依赖: 在项目的 pom.xml 文件中,添加 Mybatis-Plus 的依赖(如果尚未添加)。
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>最新版本</version>
</dependency>

2.2、添加版本字段

  1. 实体类添加版本字段: 在需要应用乐观锁的实体类中,添加一个版本号字段,并使用 @Version 注解标记。
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.TableName;@TableName("user")
public class User {private Long id;private String name;// 其他字段...@Versionprivate Integer version; // 乐观锁版本号字段// getter 和 setter 方法...
}

2.3、配置乐观锁插件

  1. 配置乐观锁插件: 在 Spring Boot 的配置文件中,添加乐观锁插件的配置。

application.yml 文件中:

mybatis-plus:configuration:# 配置数据库字段下划线转驼峰命名规则map-underscore-to-camel-case: trueglobal-config:db-config:# 配置乐观锁插件logic-not-delete-value: 0 # 逻辑未删除值logic-delete-value: 1     # 逻辑已删除值

2.4、执行更新操作

  1. 执行更新操作: 在需要进行更新操作的地方,调用 Mybatis-Plus 提供的更新方法即可。
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public boolean updateUser(User user) {UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();updateWrapper.eq("id", user.getId());// 设置其他更新条件...return userMapper.update(user, updateWrapper) > 0;}
}

在这个例子中,当执行更新操作时,Mybatis-Plus 会自动根据实体对象的版本号字段进行版本检查。如果版本号匹配,则更新数据并将版本号加一;如果版本号不匹配,更新操作将失败。

乐观锁插件使得并发更新操作更加安全,避免了数据的覆盖和错误。通过添加版本号字段以及乐观锁插件的配置,你可以轻松地在 Spring Boot 项目中应用乐观锁。

三、总结

Mybatis-Plus 插件提供了很多便捷的方法和功能,能够大幅简化 MyBatis 的开发,减少重复劳动。通过配置依赖、实体类、Mapper 接口以及相应的插件,可以在 Spring Boot 项目中高效地进行数据库操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/110501.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

stm32之DS18B20

DS18B20与stm32之间也是通过单总线进行数据的传输的。单总线协议在DHT11中已经介绍过。虽说这两者外设都是单总线&#xff0c;但时序电路却很不一样&#xff0c;DS18B20是更为麻烦一点的。 DS18B20 举例&#xff08;原码补码反码转换_原码反码补码转换_王小小鸭的博客-CSDN博客…

归并排序(Java 实例代码)

目录 归并排序 一、概念及其介绍 二、适用说明 三、过程图示 四、Java 实例代码 MergeSort.java 文件代码&#xff1a; 归并排序 一、概念及其介绍 归并排序&#xff08;Merge sort&#xff09;是建立在归并操作上的一种有效、稳定的排序算法&#xff0c;该算法是采用分…

迅为RK3588开发板Android12 设置系统默认不锁屏

修改 frameworks/base/packages/SettingsProvider/res/values/defaults.xml 文件&#xff0c;修改为如下 所示&#xff1a; - <bool name"def_lockscreen_disabled">false</bool> <bool name"def_lockscreen_disabled">true</bool&…

Django(5)-视图函数和模板渲染

Django 中的视图的概念是「一类具有相同功能和模板的网页的集合」 在我们的投票应用中&#xff0c;我们需要下列几个视图&#xff1a; 问题索引页——展示最近的几个投票问题。 问题详情页——展示某个投票的问题和不带结果的选项列表。 问题结果页——展示某个投票的结果。 投…

AutoRunner自动化测试工具新版本智能识别算法之视觉识别

泽众AutoRunner&#xff08;简称AR&#xff09;是国内专业的支持C/S、B/S各种技术框架的、基于组件识别的自动化测试工具&#xff0c;实现7*24小时的自动化回归测试和功能测试&#xff0c;让测试更智能。 视觉识别是一种通过计算机技术对图像或视频进行分析和理解的方法。这种算…

短视频矩阵系统接口部署技术搭建

前言 短视频矩阵系统开发涉及到多个领域的技术&#xff0c;包括视频编解码技术、大数据处理技术、音视频传输技术、电子商务及支付技术等。因此&#xff0c;短视频矩阵系统开发人员需要具备扎实的计算机基础知识、出色的编程能力、熟练掌握多种开发工具和框架&#xff0c;并掌握…

win10+wsl2+Ubuntu20.2+Pycharm+WSL解释器

目的&#xff1a;创建一个ubuntu系统下的python解释器&#xff0c;作为win平台下的pycharm的解释器。 这样做的好处是可以直接在win系统里操作文件&#xff0c;相比于linux方便一点&#xff0c;而且也不用对wsl的子系统进行迁移。 一、安装前准备 1. 设置-Windows更新-window…

【大数据】Linkis:打通上层应用与底层计算引擎的数据中间件

Linkis&#xff1a;打通上层应用与底层计算引擎的数据中间件 1.引言2.背景3.设计初衷4.技术架构5.业务架构6.处理流程7.如何支撑高并发8.用户级隔离度和调度时效性9.总结 Linkis 是微众银行开源的一款 数据中间件&#xff0c;用于解决前台各种工具、应用&#xff0c;和后台各种…

华为数通方向HCIP-DataCom H12-821题库(单选题:81-100)

第81题 某公司新购入一台网络设备,作为网络管理员,初次配置该设备通常通过什么方式? A、FTP B、Telnet C、SNMP D、Console 口登录 答案: D 解析&#xff1a; 通常情况下&#xff0c;初次配置网络设备会通过Console口登录的方式进行。Console口是一种串口接口&#xff0c…

自动化PLC工程师能否转到c#上位机开发?

成功从自动化PLC工程师转向C#上位机开发的经历可能因人而异&#xff0c;以下是一些分享的思路和建议&#xff1a;扩展编程技能&#xff1a;学习C#语言和相关的开发工具和框架&#xff0c;掌握语言的基础知识和常用的编程技巧。可以通过在线教程、培训课程、书籍等途径进行学习&…

C++ 多线程编程

C 多线程编程 点击获取更多的C学习笔记 1. 线程库的基本使用 创建线程 要创建线程&#xff0c;我们需要一个可调用的函数或函数对象&#xff0c;作为线程的入口点。在C11中&#xff0c;我们可以使用函数指针、函数对象或lambda表达式来实现。创建线程的基本语法如下&#x…

java.8 - java -overrideoverload 重写和重载

重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变&#xff0c;核心重写&#xff01; 重写的好处在于子类可以根据需要&#xff0c;定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。 重写方法不…

如何判断一个java对象还活着

引用计数算法 引用计数器的算法是这样的&#xff1a;在对象中添加一个引用计数器&#xff0c;每当有一个地方引用它时&#xff0c;计数器值就加一&#xff1b;当引用失效时&#xff0c;计数器值就减一&#xff1b;任何时刻计数器为零的对象就是不可能再被使用的。 缺点&#x…

微软 Visual Studio 现已内置 Markdown 编辑器,可直接修改预览 .md 文件

Visual Studio Code V1.66.0 中文版 大小&#xff1a;75.30 MB类别&#xff1a;文字处理 本地下载 Markdown 是一种轻量级标记语言&#xff0c;当开发者想要格式化代码但又不想牺牲易读性时&#xff0c;Markdown 是一个很好的解决方案&#xff0c;比如 GitHub 就使用 Markdo…

深度学习1.卷积神经网络-CNN

目录 卷积神经网络 – CNN CNN 解决了什么问题&#xff1f; 需要处理的数据量太大 保留图像特征 人类的视觉原理 卷积神经网络-CNN 的基本原理 卷积——提取特征 池化层&#xff08;下采样&#xff09;——数据降维&#xff0c;避免过拟合 全连接层——输出结果 CNN …

【Go 基础篇】深入探索:Go语言中的二维数组

在计算机编程中&#xff0c;数组是一种基本的数据结构&#xff0c;用于存储相同类型的元素。而二维数组作为数组的一种扩展&#xff0c;允许我们以类似表格的方式存储和处理数据。在Go语言中&#xff0c;二维数组是一个重要的概念&#xff0c;本文将深入探讨Go语言中的二维数组…

CentOs下面安装jenkins记录

目录 一、安装jenkins 二、进入jenkins 三、安装和Gitee&#xff0c;Maven等插件 一、安装jenkins 1 wget -O /etc/yum.repos.d/jenkins.repo \ https://pkg.jenkins.io/redhat-stable/jenkins.repo 2 rpm --import https://pkg.jenkins.io/redhat-stable/…

javacv基础02-调用本机摄像头并预览摄像头图像画面视频

引入架包&#xff1a; <dependency><groupId>org.openpnp</groupId><artifactId>opencv</artifactId><version>4.5.5-1</version></dependency><dependency><groupId>org.bytedeco</groupId><artifactId…

Spark最后一课

1.Spark的提交过程(YarnCluster) 1.命令输入脚本启动,启动submit任务 2.解析参数 看是cluster还是yarn单点模式 3.创建客户端YarnClusterApplication 4.封装提交命令交给RM 5.RM在NM上启动ApplicationMaster(AM) 注意AM消耗的资源都是container的 6.AM根据参数启动Driver并且…

mac使用VsCode远程连接服务器总是自动断开并要求输入密码的解决办法

在mac中使用vscode远程连接服务器&#xff0c;时常会出现自动断开并要求重新输入服务器密码的问题&#xff0c;接下来让我们来解决它&#xff1a; 1、首先&#xff0c;在本地创建公钥&#xff1a; ssh-keygen 这条命令执行之后&#xff0c;出现提示直接回车即可&#xff1b;直…