• mybatis-plus的插件


    一.mybatis的插件机制

    1.介绍

    2.配置步骤

    2.1.首先写一个拦截器的类

    1. import org.apache.ibatis.executor.Executor;
    2. import org.apache.ibatis.mapping.MappedStatement;
    3. import org.apache.ibatis.plugin.*;
    4. import java.util.Properties;
    5. @Intercepts({
    6. @Signature(
    7. type = Executor.class,//表示拦截执行器的方法
    8. method = "update",//表示拦截执行器中的update方法
    9. args = {MappedStatement.class,Object.class}
    10. )
    11. })
    12. public class MyIntercepter implements Interceptor {
    13. @Override
    14. public Object intercept(Invocation invocation) throws Throwable {
    15. //拦截方法,具体业务逻辑编写的位置
    16. return invocation.proceed();
    17. }
    18. @Override
    19. public Object plugin(Object target) {
    20. //创建target对象的代理对象,目的是将当前的拦截器加入到该对象中,这个方法会被执行4次:因为有4中拦截的情况
    21. return Plugin.wrap(target,this);
    22. }
    23. @Override
    24. public void setProperties(Properties properties) {
    25. //属性设置
    26. }
    27. }

     2.2.在配置类中注入拦截器

    1. @Configuration
    2. @MapperScan("com.cd.mp.mapper")
    3. public class MybatisPlusConfig {
    4. @Bean//设置分页插件
    5. public PaginationInterceptor paginationInterceptor(){
    6. return new PaginationInterceptor();
    7. }
    8. @Bean
    9. public MyIntercepter myIntercepter(){
    10. return new MyIntercepter();
    11. }
    12. }

    二.执行分析插件

    三.性能分析插件

    四.乐观锁插件

    2.插件配置

    3.实体类中配置

    4.数据库表也要version字段

    5.测试

    插件会自动给version加一 

    总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制和CAS算法实现。

    缺点:

    五.mybatis-plus的自动填充功能

    1.首先在实体类中用@TableField注解file来设置什么时候自动填充

    2.继承MetaObject

     六.Mybatis-Plus的逻辑删除

     

     1.数据库中的表需要一个对应的deleted字段

    2.实体类

    3.springBoot的配置文件

     7.通用枚举

    1.首先表要有对应的字段

    后端接收前端传来的String类型参数需要用枚举来接收的话,就需要定义一个自定义转换器

    1. import com.dingli.framework.eunm.MarryEumn;
    2. import org.springframework.context.annotation.Configuration;
    3. import org.springframework.core.convert.converter.Converter;
    4. import org.springframework.format.FormatterRegistry;
    5. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    6. @Configuration
    7. public class WebConfig implements WebMvcConfigurer {
    8. @Override
    9. public void addFormatters(FormatterRegistry registry) {
    10. registry.addConverter(new Converter<String, MarryEumn>() {
    11. @Override
    12. public MarryEumn convert(String s) {
    13. MarryEumn marryEumn = null;
    14. if (s.equals("未婚")){
    15. marryEumn = MarryEumn.NOMARRY;
    16. }
    17. if (s.equals("订婚")){
    18. marryEumn = MarryEumn.RESERVEMARRY;
    19. }
    20. if (s.equals("已婚")){
    21. marryEumn = MarryEumn.MARRY;
    22. }
    23. if (s.equals("离婚")){
    24. marryEumn = MarryEumn.DIVORCE;
    25. }
    26. return marryEumn;
    27. }
    28. });
    29. }
    30. }

    2.定义枚举:继承IEnum接口

    @EnumValue:指定数据库中存的值

    @JsonValue:指定返回给前端的值

    1. import com.baomidou.mybatisplus.annotation.EnumValue;
    2. import com.baomidou.mybatisplus.core.enums.IEnum;
    3. import com.fasterxml.jackson.annotation.JsonValue;
    4. public enum MarryEumn implements IEnum {
    5. NOMARRY(0,"未婚"),
    6. RESERVEMARRY(1,"订婚"),
    7. MARRY(2,"已婚"),
    8. DIVORCE(3,"离婚");
    9. @EnumValue
    10. private int value;
    11. @JsonValue
    12. private String desc;
    13. MarryEumn(int value, String desc) {
    14. this.value = value;
    15. this.desc = desc;
    16. }
    17. @Override
    18. public Integer getValue() {
    19. return this.value;
    20. }
    21. @Override
    22. public String toString() {
    23. return this.desc;
    24. }
    25. }

     3.springboot中配置

    default-enum-type-handler:这个也很重要,这里不配的话,如果是自己写xml文件,在sql中也会写

    #{marriage,typeHandler=org.apache.ibatis.type.EnumTypeHandler}
    1. mybatis-plus:
    2. global-config:
    3. db-config:
    4. id-type: auto
    5. configuration:
    6. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    7. default-enum-type-handler: org.apache.ibatis.type.EnumOrdinalTypeHandler
    8. type-enums-package: com.dingli.framework.eunm
    9. mapper-locations: classpath*:mappers/*Mapper.xml

    4.修改实体

    8.MP的代码生成器

    9.MybatisX快速开发插件

  • 相关阅读:
    python-opencv学习笔记1 opencv中的GUI特征
    基于树莓派的人脸识别门禁系统
    tomcat+idea--如何在idea上发布项目
    2022亚太数学杯数学建模竞赛C题(思路、程序......)
    超越 Transformer开启高效开放语言模型的新篇章
    sping
    windows本地node.js和Vue脚手架安装步骤
    对称加密,非对称加密,数字证书以及实例运用-Https加密方式
    MogaFX—美元正在升值吗?价格什么时候下跌?
    重磅!Adobe收购Figma
  • 原文地址:https://blog.csdn.net/weixin_54401017/article/details/125800206