MybatisPlus之常用插件的使用

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加

MybatisPlus之常用插件的使用


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

文章目录


前言

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

在使用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:防止全表更新与删除。

二、常见插件的使用

分页插件

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

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

防止全表更新与删除插件

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

java 复制代码
// 注册插件
@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 的乐观锁插件。

java 复制代码
// 注册插件
@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注解。

java 复制代码
@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;
  @Version
  private Integer version;
}

3.修改数据库表,添加一列整型version字段并设置默认值为0

4.使用乐观锁进行操作:当你更新一个记录时,MyBatis-Plus 会自动检查版本号是否一致,并更新版本号。

java 复制代码
// 修改
@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字段,并在实体类中添加乐观锁注解。
相关推荐
誰能久伴不乏9 分钟前
Qt 开发中的父类与父对象的区别和父对象传递:如何选择 `QWidget` 或 `QObject`?
java·开发语言·qt
喜欢踢足球的老罗18 分钟前
在Spring Boot 3.3中使用Druid数据源及其监控功能
java·spring boot·后端·druid
Winn~35 分钟前
JVM垃圾回收器-ZGC
java·jvm·算法
大熊猫侯佩37 分钟前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(三)
数据库·swiftui·swift
大熊猫侯佩37 分钟前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(二)
数据库·swiftui·swift
大熊猫侯佩42 分钟前
用异步序列优雅的监听 SwiftData 2.0 中历史追踪记录(History Trace)的变化
数据库·swiftui·swift
bytebeats43 分钟前
深入探索 Java 21 的核心特性
java
大熊猫侯佩44 分钟前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(一)
数据库·swiftui·swift
Ares-Wang1 小时前
负载均衡LB》》HAproxy
运维·数据库·负载均衡
程序员小假1 小时前
说一说 SpringBoot 中 CommandLineRunner
java·后端