MybatisPlus复习

本文回顾了MybatisPlus中的通用枚举类、执行分析插件升级、全局异常处理,包括防止全表操作和主键策略,以及逻辑删除和乐观锁功能。
摘要由CSDN通过智能技术生成

MybatisPlus复习

一、通用枚举类

import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.Getter;

@Getter
public enum SexEnum {
    MALE(1, "男"),
    FEMALE(2, "女");
    @EnumValue
    private Integer sex;
    private String sexName;

    SexEnum(Integer sex, String sexName) {
        this.sex = sex;
        this.sexName = sexName;
    }
}

配置扫描通用枚举

mybatis-plus:
	# 配置扫描通用枚举
	type-enums-package: com.atguigu.mybatisplus.enums

二、执行分析插件

踩坑!!!! 旧版本是SqlExplainInterceptor 、新版本是BlockAttackInnerInterceptor

​ ‘SqlExplainInterceptor’,作用是分析 处理 DELETE UPDATE 语句, 防止小白或者恶意 delete update 全表操作。

配置文件案例

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MybatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
//        拦截器链条
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//        分页插件
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
//        防止全表更新与删除插件
        interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
//        启用乐观锁插件
//        @Version
//        private Integer version;
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }

}

全局异常处理

import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {

    @ExceptionHandler(MybatisPlusException.class)
    public String handleResourceNotFoundException(MybatisPlusException e) {
        System.out.println(e.getMessage());
        if (e.getMessage().contains("Prohibition of full table")){
            return "禁止全表操作!!/(ㄒoㄒ)/~~";
        }
        return "global exception";
    }
}

三、主键策略

IdType.ASSIGN_ID(默认)

基于雪花算法的策略生成数据id,与数据库id是否设置自增无关

IdType.AUTO

使用数据库的自增策略,注意,该类型请确保数据库设置了id自增,否则无效

四、逻辑删除

五、乐观锁

六、字段填充

MybatisPlus拦截器的保存是通过维护一个拦截器List来实现的。在MybatisPlus中,拦截器的保存是在MybatisPlusInterceptor类内部完成的。该类维护了一个拦截器List,在拦截的时候会依次调用这些拦截器。拦截器的执行顺序就是List中的元素下标。\[1\] 在Mybatis中,可以拦截的类型共有4种:Executor(拦截执行器的方法),method=update包括了增删改,可以从MappedStatement中获取实际执行的是哪种类型;ParameterHandler(拦截参数的处理);ResultSetHandler(拦截结果集的处理);StatementHandler(拦截Sql语法构建的处理)\[2\]。 如果你想在使用MybatisPlus时配置拦截器,可以通过在配置类中定义一个Bean来实现。例如,在MybatisPlusConfig配置类中,可以使用@Bean注解来定义一个PaginationInterceptor的Bean,然后将其返回。这样就可以将PaginationInterceptor作为拦截器来使用了\[3\]。 #### 引用[.reference_title] - *1* *2* [mybatisPlus拦截器使用demo](https://blog.csdn.net/weixin_43944305/article/details/130290766)[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^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [MybatisPlus的分页插件拦截器解析sql流程(自用复习)](https://blog.csdn.net/qq_39954577/article/details/125056083)[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^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值