MybatisPlus之常用插件的使用

发布时间:2023年12月30日

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
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:防止全表更新与删除。

二、常见插件的使用

分页插件

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

// 注册插件
@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;
  @Version
  private 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字段,并在实体类中添加乐观锁注解。
文章来源:https://blog.csdn.net/liubopro666/article/details/135305168
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。