MyBatis-Plus 常用插件

MyBatis-Plus 常用插件

一、MyBatis 插件

​ MyBatis插件就是对 Executor、StatementHandler、 ParameterHandler、ResultSetHandler 这四个接口上的方法进行拦截,利用JDK 动态代理机制,为这些接口的实现类创建代理对象, 在执行方法时,先去执行代理对象的方法,从而执行自己编写的拦截逻辑。

  • Executor

    MyBatis 的内部执行器,它负责调用 StatementHandler 操作数据库,并把结果集通过 ResultSetHandler 进行自动映射

  • StatementHandler

    MyBatis 直接让数据库执行 SQL 脚本的对象。

  • ParameterHandler

    MyBatis 实现 SQL 入参设置的对象。

  • ResultSetHandler

    MyBatis 把 ResultSet 集合映射成 POJO 的接口对象。

二、MyBatis-Plus 插件

​ MyBatis-Plus 依据 MyBatis 插件机制,为我们提供了一些开发中常用的插件,我们在开发中使用即可。常用插件如下:

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

​ 这些插件都实现了 InnerInterceptor 接口

1. 分页插件

​ MyBatis-Plus 自带的分页插件,即为 BaseMapper 接口中的 selectPage() 方法,简单的配置就可以实现分页功能。

(1)首先需要在配置类或启动类中配置分页插件:

/**
 * MybatisPlus 配置类
 * 功能:加载分页插件
 */
@Configuration
public class MybatisPlusConfig {
    
    /**
     * 分页插件
     * @return 分页插件bean
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //分页插件
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

(2)测试分页查询

@Test
public void testPageSelect(){
    //创建分页条件,参数为当前页的页码(current)、每页显示的条数(size),
    Page<Student> page = new Page<>(1,3);
    //分页查询,参数有两个,第一个是Page类型的(分页对象),第二个是queryWapper类型的。
    IPage<Student> iPage = studentMapper.selectPage(page, null);
    // 打印分页数据
    System.out.println("结果集:"+iPage.getRecords());
    System.out.println("总页数:"+iPage.getPages());
    System.out.println("总条数:"+iPage.getTotal());
    System.out.println("当前页:"+iPage.getCurrent());
    System.out.println("每页条数:"+iPage.getSize());
}
2. 防止全表更新与删除插件

作用:分析删除/更新语句,防止小白或者恶意进行删除/更新全表操作。

注意:

  • 该插件只支持 MySQL5.6.3 以上版本
  • 该插件只建议在开发环境中使用,不建议在生产环境使用

在 MybatisPlus 配置类里面配置防止全表更新与删除插件

//防止全表更新与删除插件
interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());

在检测出来有全表更新或者删除的操作,MybatisPlus 会在服务启动时报异常。

3. 乐观锁插件

修改数据库中的数据时,为了避免同时被其他人修改,最好的办法就是对该数据进行加锁以防止并发。

锁的设计分为悲观锁和乐观锁:

  • 悲观锁:悲观锁对数据被外界修改持保守态度。即在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现往往依靠数据库提供的锁机制。

在这里插入图片描述

  • 乐观锁:乐观锁在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果冲突,则返回给用户异常信息,让用户决定如何去做。

在这里插入图片描述

MyBatisPlus 乐观锁插件实现方式:

  • 取出记录时,获取当前version
  • 更新时,带上这个version
  • 执行更新时, set version = newVersion where version = oldVersion
  • 如果version不对,就更新失败

使用 MyBatisPlus 乐观锁插件的步骤:

(1)首先还是在 MybatisPlus 配置类里面配置乐观锁插件

// 乐观锁插件
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());

(2)修改实体类,添加 version 列并在该属性上面增加 @Version 注解

@Version
private Integer version;

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

(4)测试乐观锁插件

@Test
public void testUpdate(){
    Student student = Student.builder().id(1).name("李华").version(0).build();
    //如果版本号和数据库一致更新成功,版本号+1,如果不一致更新失败
    studentMapper.updateById(student);
}
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Mybatis-plus是一个基于Mybatis的增强工具,它提供了一些常用插件来增加开发效率和功能。其中,Mybatis-plus-join是一个用于解决Mybatis-plus在多表连接查询方面的不足的工具。它能够对Mybatis-plus进行功能升级,使其能够进行多表连接查询,从而摆脱了传统的XML模式多表连接的限制。使用Mybatis-plus-join可以提高开发效率,而且使用方法与Mybatis-plus一样,学习成本较低。另外,Mybatis-plus还提供了其他常用插件,如自动分页插件、防止全表更新与删除插件、乐观锁插件等,可以根据需要进行配置和使用。如果想要使用Mybatis-plus插件,需要在配置类或启动类中进行相应的配置,比如配置分页插件,可以通过添加PaginationInnerInterceptor来实现。具体的配置方法可以参考相关文档或示例代码。 #### 引用[.reference_title] - *1* [Mybatis-plus做连接查询的插件Mybatis-plus-join](https://blog.csdn.net/m0_67400973/article/details/126463252)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [MyBatis-Plus 常用插件](https://blog.csdn.net/m0_53067943/article/details/126112463)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我真真的是小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值