MybatisPlus之常用插件的使用

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
MybatisPlus之常用插件的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 系列文章目录
  • 前言
  • 一、插件概述
    • MyBatis插件机制
    • MyBatisPlus常用插件
  • 二、常见插件的使用
    • 分页插件
    • 防止全表更新与删除插件
    • 乐观锁插件
  • 四、Idae常用Mybatis插件
    • MybatisX
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

在使用MybatisPlus进行数据库操作时,为了提高开发效率和代码质量,可以使用一些常用的插件。以下是一篇关于MybatisPlus常用插件使用的博客前言:
MybatisPlus是一个支持自动映射和简化数据库操作的Mybatis增强工具,提供了丰富的注解和扩展功能,可以帮助开发人员轻松地进行数据库的增删改查操作。在使用MybatisPlus的过程中,合理地使用插件可以进一步提高开发效率和代码质量。
在这篇博客中,我们将介绍MybatisPlus中常用的插件,包括分页插件、乐观锁插件等。我们将通过具体的示例代码,演示如何使用这些插件来优化查询和提高数据处理的性能。同时,我们也将探讨插件的原理和使用场景,帮助读者更好地理解和运用这些工具。
最后,我们将提供一些常见问题的解决方案和使用技巧,帮助读者更好地应对实际开发中的挑战。希望这篇博客能够对MybatisPlus的使用者有所帮助,让大家在数据库操作方面更加高效和便捷。


提示:以下是本篇文章正文内容,下面案例可供参考

一、插件概述

MyBatis插件机制

MyBatis插件机制是通过拦截器(Interceptor)实现的,可以对执行器(Executor)、参数处理器(ParameterHandler)、结果集处理器(ResultSetHandler)和SQL语法构建器(StatementHandler)这四大核心对象进行拦截。通过利用JDK动态代理机制,为这些接口的实现类创建代理对象,在执行方法时,先去执行代理对象的方法,从而执行自己编写的拦截逻辑。

  • Executor:MyBatis的内部执行器,它负责调用StatementHandler操作数据库,并把结果集通过 ResultSetHandler进行自动映射。
  • StatementHandler:MyBatis直接让数据库执行sql脚本的对象。
  • ParameterHandler:MyBatis实现Sql入参设置的对象。
  • ResultSetHandler:MyBatis把ResultSet集合映射成POJO的接口对象。

MyBatisPlus常用插件

MybatisPlus提供了很多的插件功能,目前已有的主要插件有:

  • PaginationInnerInterceptor:自动分页。
  • OptimisticLockerInnerInterceptor:乐观锁。
  • BlockAttackInnerInterceptor:防止全表更新与删除。

二、常见插件的使用

分页插件

在配置类或启动类配置分页插件:

// 注册插件
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;
}

防止全表更新与删除插件

在配置类或启动类配置防止全表更新与删除插件

// 注册插件
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();// 分页插件interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));// 防止全表更新与删除插件interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());return interceptor;
}

乐观锁插件

修改数据库中的数据时,为了避免同时被其他人修改,最好的办法就是对该数据进行加锁以防止并发。乐观锁是一种并发处理机制,它在更新数据时,通过比较数据的版本号来判断是否可以更新。MybatisPlus的乐观锁插件可以帮助你在更新数据时实现乐观锁,其使用步骤如下:
1.配置乐观锁插件:在 Spring Boot 项目中配置 MyBatis-Plus 的乐观锁插件。

// 注册插件
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();// 分页插件interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));// 防止全表更新与删除插件interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());// 乐观锁插件interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());return interceptor;
}

2.在实体类中添加乐观锁字段和注解:在你希望使用乐观锁的实体类中,添加一个用于表示版本的字段,并且加上@Version注解。

@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("tb_student")
public class Student extends Model<Student> {@TableId(value = "sid",type = IdType.AUTO)private Integer id;@TableField("sname")private String name;private String email;private String gender;private Integer age;@Versionprivate Integer version;
}

3.修改数据库表,添加一列整型version字段并设置默认值为0
4.使用乐观锁进行操作:当你更新一个记录时,MyBatis-Plus 会自动检查版本号是否一致,并更新版本号。

// 修改
@Test
public void testUpdate1() {Student student = new Student();student.setId(10);student.setName("zhangsan");//如果版本号和数据库一致更新成功,版本号+1,如果不一致更新失败student.setVersion(10);student.updateById();
}

四、Idae常用Mybatis插件

该插件非彼插件,此插件是idea的插件,是使我们在使用MybatisPlus开发项目中的插件。

MybatisX

MybatisX是一款基于IDEA的快速开发插件,由MyBatis-Plus团队开发维护,为效率而生。它的主要功能如下:

  • 支持mapper.xml和Mapper接口之间方法的互相导航跳转。
  • 内置代码生成器,通过使用GUI的形式,能根据数据库来生成Domain、mapper.xml、Mapper、Service和Service实现类代码。
  • 可以自定义代码生成器模板。
  • 可以通过类似JPA的方式,直接根据方法名称在mapper.xml中生成查询实现,同时支持提示。

安装方法:打开 IDEA,进入 File -> Settings -> Plugins -> Marketplace,输入 mybatisx 搜索并安装。


总结

提示:这里对文章进行总结:

  • 分页查询:在配置文件中,通过@Bean注解定义一个MybatisPlusInterceptor对象,并调用其addInnerInterceptor方法添加分页插件PaginationInnerInterceptor;创建一个Page对象,设置当前页和每页的记录数;调用Mapper的selectPage方法,传入分页对象和查询条件,获取分页后的数据。
  • 防止全表更新与删除:MybatisPlus提供了“SqlExplainInterceptor”拦截器,可以用于防止全表更新和删除操作。开启后,当数据库操作SQL中出现“UPDATE”或者“DELETE”的时候,拦截器会对SQL进行解析,如果存在没有带条件的“UPDATE”或者“DELETE”语句,拦截器会抛出异常,从而防止全表更新和删除操作。
  • 乐观锁:主要适用于当要更新一条记录时,希望这条记录没有被别人更新,也就是实现线程安全的数据更新。实现流程是在数据库中添加version字段,并在实体类中添加乐观锁注解。

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

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

相关文章

SpringAMQP的使用方式

MQ介绍 MQ&#xff0c;中文是消息队列&#xff08;MessageQueue&#xff09;&#xff0c;字面来看就是存放消息的队列。也就是事件驱动架构中的Broker。 比较常见的MQ实现&#xff1a; ActiveMQ RabbitMQ RocketMQ Kafka 几种常见MQ的对比&#xff1a; RabbitMQActiveM…

unity随笔- 2D动画制作animation

1.前提&#xff1a;将连续的动作图片制为图集。 2.在Hierarchy中选中含图集的sprites对象。 3.打开animator组件&#xff0c;点击create创建动画组件 4.添加property选择sprite 5.选择图集需要的部分加入animation。&#xff08;animation使用见animator&#xff09;

OSG绘制视锥体(升级版)

OSG绘制视锥体&#xff0c;这一篇增加设置相机参数接口&#xff0c;支持通过eye、center、up设置相机参数。 代码如下&#xff1a; #include "stdafx.h" #include <osgViewer/Viewer> #include <osg/ShapeDrawable> #include <osg/Geode> #includ…

产品经理学习-怎么写PRD文档

目录 瀑布流方法论介绍 产品需求文档&#xff08;PRD&#xff09;介绍 产品需求文档的基本要素 撰写产品需求文档 优先产品需求文档的特点 其他相关文档 瀑布流方法论介绍 瀑布流模型是一种项目的开发和管理的方法论&#xff0c;是敏捷的开发管理方式相对应的另一种方法…

JVM工作原理与实战(二):字节码编辑器jclasslib

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、字节码编辑器jclasslib介绍和安装 1.介绍 2.安装 3.IntelliJ IDEA 插件安装 二、字节码编辑器jclasslib的使用 1.使用jclasslib bytecode viewer打开字节码文件 2.使用Intell…

Python+OpenGL绘制3D模型(九)完善插件功能: 矩阵,材质,法线

系列文章 一、逆向工程 Sketchup 逆向工程&#xff08;一&#xff09;破解.skp文件数据结构 Sketchup 逆向工程&#xff08;二&#xff09;分析三维模型数据结构 Sketchup 逆向工程&#xff08;三&#xff09;软件逆向工程从何处入手 Sketchup 逆向工程&#xff08;四&#xf…

7.java——Obiect内部类 equals方法和toString方法

1.所有的java类都必须继承于object类 object中没有声明任何属性 object类提供一个空参的构造器 object类中声明的方法 面试题&#xff1a;final &#xff0c;finally&#xff0c;finalize区别 在Java中&#xff0c;final、finally和finalize是三个不同的概念。 1.final是一个…

自动驾驶学习笔记(二十三)——车辆控制模型

#Apollo开发者# 学习课程的传送门如下&#xff0c;当您也准备学习自动驾驶时&#xff0c;可以和我一同前往&#xff1a; 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo开放平台9.0专项技术公开课》免费报名—>传送门 文章目录 前言 运动学模型 动力学模型 总结…

微服务(4)

目录 16.网关与过滤器有什么区别&#xff1f; 17.常用的网关框架有哪些&#xff1f; 18.Zuul与Nginx有什么区别&#xff1f; 19.既然Nginx可以实现网关&#xff0c;为什么还需要使用Zuul框架&#xff1f; 20.ZuulFilter常用有哪些方法&#xff1f; 16.网关与过滤器有什么区…

MyBatis-config.xml配置文件

1、基本介绍&#xff1a; mybatis的核心配置文件(mybatis-config.xml)&#xff0c;比如配置jdbc连接信息&#xff0c;注册mapper等等&#xff0c;我们需要对这个配置文件有详细的了解。 官网地址有详细介绍 mybatis – MyBatis 3 | 配置 2、properties属性 在通常的情况下&am…

Java 运算符

&&运算比||运算的优先级高 C与Java

GPT-5:未来的大潮,即将到来?

GPT-5&#xff1a;未来的大潮&#xff0c;即将到来&#xff1f; 随着人工智能领域的迅猛发展&#xff0c;OpenAI的GPT&#xff08;Generative Pre-trained Transformer&#xff09;系列模型已经成为了业界的焦点。自从GPT-3在2020年震撼发布以来&#xff0c;它凭借强大的自然语…

微信小程序 手机号授权登录 偶尔后端解密失败

微信小程序wx.login获取code要在手机号授权前触发 <button:id"code":open-type"hasGetPrivacySetting ? getPhoneNumber|agreePrivacyAuthorization : getPhoneNumber"getphonenumber"onGetPhoneNumber"class"btn"click"cli…

【Unity入门】热更新框架之xLua

目录 一、xLua概述1.1xLua简介1.2xLua安装 二、Lua文件加载2.1执行字符串2.2加载Lua文件2.3自定义loader 三、xLua文件配置3.1打标签3.2静态列表3.3动态列表 四、Lua与C#交互4.1 C#访问Lua4.1.1 获取一个全局基本数据类型4.1.2 访问一个全局的table4.1.3 访问一个全局的functio…

python:PyCharm更改.PyCharm配置文件夹存储位置

关联账号文章&#xff1a;另外的账号 在启动 PyCharm 后选择 Help -> Edit Custom Properties 的选项&#xff0c;弹出&#xff1a; 选择 Create &#xff0c;之后在文件中添加配置文件新的存储位置即可&#xff0c;例如&#xff1a; idea.config.pathD:/Program Files/.Py…

STM32 ESP8266 物联网智能温室大棚 源码PCB原理图 设计文档

资料下载: https://download.csdn.net/download/vvoennvv/88680924 一、概述 本系统以STM32F103C8T6单片机为主控芯片&#xff0c;采用相关传感器构建系统硬件电路。其中使用DHT11温湿度传感器对温度和湿度的采集&#xff0c;MQ-7一氧化碳传感器检测CO浓度&#xff0c;GP2Y101…

Hive集群出现报错信息解决办法

一、报错信息&#xff1a;hive> show databases;FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient 解决办法&#xff1a;1.删除mysql中的元数据库&#xff08;metastore&#xff0…

车载电子电器架构 —— 电子电气系统开发角色定义

车载电子电器架构 —— 电子电气系统开发角色定义 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 注:本文12000字,深度思考者进!!! 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的…

docker_ROS的usb_cam使用与标定

目录 准备 准备标定板 新建容器 新建usb_cam话题的ROS功能包 编写代码 编译 运行功能包 标定 安装camera_calibration标定功能包 启动发布usb_cam话题的功能包 启动camera_calibration标定功能包 准备 usb相机 标定板 一个带有ROS的docker镜像。 准备标定板 图…