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字段,并在实体类中添加乐观锁注解。
相关推荐
清水白石00814 分钟前
解构异步编程的两种哲学:从 asyncio 到 Trio,理解 Nursery 的魔力
运维·服务器·数据库·python
资生算法程序员_畅想家_剑魔16 分钟前
Mysql常见报错解决分享-01-Invalid escape character in string.
数据库·mysql
一嘴一个橘子22 分钟前
spring-aop 的 基础使用 - 4 - 环绕通知 @Around
java
小毅&Nora39 分钟前
【Java线程安全实战】⑨ CompletableFuture的高级用法:从基础到高阶,结合虚拟线程
java·线程安全·虚拟线程
冰冰菜的扣jio39 分钟前
Redis缓存中三大问题——穿透、击穿、雪崩
java·redis·缓存
PyHaVolask42 分钟前
SQL注入漏洞原理
数据库·sql
小璐猪头1 小时前
专为 Spring Boot 设计的 Elasticsearch 日志收集 Starter
java
ptc学习者1 小时前
黑格尔时代后崩解的辩证法
数据库
代码游侠1 小时前
应用——智能配电箱监控系统
linux·服务器·数据库·笔记·算法·sqlite
ps酷教程1 小时前
HttpPostRequestDecoder源码浅析
java·http·netty