Wenn Sie mybatis-plus entsprechend dem Framework integrieren

1. Warum mybatis-plus verwenden?

  • Kein Eingriff: nur Verbesserung und keine Änderung, die Einführung hat keine Auswirkungen auf das bestehende Projekt, so glatt wie Seide
  • Geringer Verlust: Der grundlegende CURD wird beim Start automatisch injiziert, die Leistung ist grundsätzlich verlustfrei und der objektorientierte Vorgang wird direkt ausgeführt
  • Leistungsstarke CRUD-Operationen: Integrierter allgemeiner Mapper und allgemeiner Service. Die meisten CRUD-Operationen für eine einzelne Tabelle können mit nur geringem Konfigurationsaufwand realisiert werden, und es gibt einen leistungsstarken Bedingungskonstruktor, der verschiedene Nutzungsanforderungen erfüllt
  • Unterstützung des Lambda-Formularaufrufs: Mithilfe von Lambda-Ausdrücken ist es bequem, verschiedene Abfragebedingungen zu schreiben, ohne dass Sie sich über Feldtippfehler Gedanken machen müssen
  • Unterstützt die automatische Primärschlüsselgenerierung: Unterstützt bis zu 4 Primärschlüsselstrategien (einschließlich eines verteilten eindeutigen ID-Generators – Sequenz), die frei konfiguriert werden können, um das Primärschlüsselproblem perfekt zu lösen
  • Unterstützt den ActiveRecord-Modus: Unterstützt den ActiveRecord-Formularaufruf. Die Entitätsklasse muss nur die Modellklasse erben, um leistungsstarke CRUD-Vorgänge auszuführen
  • Unterstützt benutzerdefinierte globale allgemeine Operationen: Unterstützt die globale allgemeine Methodeninjektion (Einmal schreiben, überall verwenden).
  • Integrierter Codegenerator: Verwenden Sie Code oder ein Maven-Plug-in, um schnell Mapper-, Modell-, Service-, Controller-Layer-Code zu generieren, unterstützen Sie die Template-Engine und weitere benutzerdefinierte Konfigurationen warten darauf, von Ihnen verwendet zu werden
  • Integriertes Paging-Plug-In: Basierend auf dem physischen Paging von MyBatis müssen sich Entwickler nicht um bestimmte Vorgänge kümmern. Nach der Konfiguration des Plug-Ins entspricht das Schreiben von Paging einer gewöhnlichen Listenabfrage
  • Das Paging-Plug-in unterstützt mehrere Datenbanken: unterstützt MySQL, MariaDB, Oracle, DB2, H2, HSQL, SQLite, Postgre, SQLServer und andere Datenbanken
  • Integriertes Leistungsanalyse-Plug-in: Es kann SQL-Anweisungen und deren Ausführungszeit ausgeben. Es wird empfohlen, diese Funktion während der Entwicklung und beim Testen zu aktivieren, um langsame Abfragen schnell herauszufinden
  • Integriertes globales Blockierungs-Plug-in: Bietet eine intelligente Analyse und Blockierung von Lösch- und Aktualisierungsvorgängen der gesamten Tabelle und passt außerdem Blockierungsregeln an, um Fehlbedienungen zu verhindern

2. Integrationsschritte

1. Importieren Sie die POM-Datei

<!--   mybatis-plus     -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3.1</version>
</dependency>

Ich bin eine Abhängigkeit von mybatis-plus, die unter dem Modul ruoyi-common eingeführt wurde

2. Erhöhen Sie die Konfigurationsklasse von mybatis-plus

Der Speicherort des neuen Pakets ist wie folgt

Fügen Sie hier eine Bildbeschreibung ein
Erstellen Sie unter dem Paket mybatisplus die Klasse
CreateAndUpdateMetaObjectHandler

Code wird wie folgt angezeigt

package com.spider.framework.mybatisplus;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.spider.common.utils.SecurityUtils;
import org.apache.ibatis.reflection.MetaObject;

import java.util.Date;


public class CreateAndUpdateMetaObjectHandler implements MetaObjectHandler {
    
    
    @Override
    public void insertFill(MetaObject metaObject) {
    
    
        //region 处理创建人信息
        Object createBy = this.getFieldValByName("createBy", metaObject);
        Object createTime = this.getFieldValByName("createTime", metaObject);
        if (createBy == null) {
    
    
            createBy = SecurityUtils.getUsername();
            this.setFieldValByName("createBy", createBy, metaObject);
        }
        if (createTime == null) {
    
    
            createTime = new Date();
            this.setFieldValByName("createTime", createTime, metaObject);
        }
        //endregion
        //region 处理修改人信息
        Object updateBy = this.getFieldValByName("updateBy", metaObject);
        Object updateTime = this.getFieldValByName("updateTime", metaObject);
        if (updateBy == null) {
    
    
            updateBy = createBy;
            this.setFieldValByName("updateBy", updateBy, metaObject);
        }
        if (updateTime == null) {
    
    
            updateTime = createTime;
            this.setFieldValByName("updateTime", updateTime, metaObject);
        }
        //endregion
    }

    @Override
    public void updateFill(MetaObject metaObject) {
    
    
        //region 处理修改人信息
        Object updateBy = this.getFieldValByName("updateBy", metaObject);
        Object updateTime = this.getFieldValByName("updateTime", metaObject);
        if (updateBy == null) {
    
    
            updateBy = SecurityUtils.getUsername();
            this.setFieldValByName("updateBy", updateBy, metaObject);
        }
        if (updateTime == null) {
    
    
            updateTime = new Date();
            this.setFieldValByName("updateTime", updateTime, metaObject);
        }
        //endregion
    }

    @Override
    public boolean openInsertFill() {
    
    
        return true;
    }

    @Override
    public boolean openUpdateFill() {
    
    
        return true;
    }
}

3. Ändern Sie die YML-Konfigurationsdatei

Fügen Sie hier eine Bildbeschreibung ein

Kommentieren Sie die ursprüngliche Mybatis-Konfiguration aus und fügen Sie den folgenden Code hinzu

# MyBatis配置
#mybatis:
#    # 搜索指定包别名
#    typeAliasesPackage: com.spider.**.domain
#    # 配置mapper的扫描,找到所有的mapper.xml映射文件
#    mapperLocations: classpath*:mapper/**/*Mapper.xml
#    # 加载全局的配置文件
#    configLocation: classpath:mybatis/mybatis-config.xml

mybatis-plus:
  # 对应的 XML 文件位置
  mapperLocations: classpath*:mapper/**/*Mapper.xml
  # 实体扫描,多个package用逗号或者分号分隔
  typeAliasesPackage: com.spider.**.domain
  # 针对 typeAliasesPackage,如果配置了该属性,则仅仅会扫描路径下以该类作为父类的域对象
  #typeAliasesSuperType: Class<?>
  # 如果配置了该属性,SqlSessionFactoryBean 会把该包下面的类注册为对应的 TypeHandler
  #typeHandlersPackage: null
  # 如果配置了该属性,会将路径下的枚举类进行注入,让实体类字段能够简单快捷的使用枚举属性
  #typeEnumsPackage: null
  # 启动时是否检查 MyBatis XML 文件的存在,默认不检查
  checkConfigLocation: false
  # 通过该属性可指定 MyBatis 的执行器,MyBatis 的执行器总共有三种:
  # SIMPLE:该执行器类型不做特殊的事情,为每个语句的执行创建一个新的预处理语句(PreparedStatement)
  # REUSE:该执行器类型会复用预处理语句(PreparedStatement)
  # BATCH:该执行器类型会批量执行所有的更新语句
  executorType: SIMPLE
  # 指定外部化 MyBatis Properties 配置,通过该配置可以抽离配置,实现不同环境的配置部署
  configurationProperties: null
  configuration:
    # 自动驼峰命名规则(camel case)映射
    # 如果您的数据库命名符合规则无需使用 @TableField 注解指定数据库字段名
    mapUnderscoreToCamelCase: true
    # 默认枚举处理类,如果配置了该属性,枚举将统一使用指定处理器进行处理
    # org.apache.ibatis.type.EnumTypeHandler : 存储枚举的名称
    # org.apache.ibatis.type.EnumOrdinalTypeHandler : 存储枚举的索引
    # com.baomidou.mybatisplus.extension.handlers.MybatisEnumTypeHandler : 枚举类需要实现IEnum接口或字段标记@EnumValue注解.
    defaultEnumTypeHandler: org.apache.ibatis.type.EnumTypeHandler
    # 当设置为 true 的时候,懒加载的对象可能被任何懒属性全部加载,否则,每个属性都按需加载。需要和 lazyLoadingEnabled 一起使用。
    aggressiveLazyLoading: true
    # MyBatis 自动映射策略
    # NONE:不启用自动映射
    # PARTIAL:只对非嵌套的 resultMap 进行自动映射
    # FULL:对所有的 resultMap 都进行自动映射
    autoMappingBehavior: PARTIAL
    # MyBatis 自动映射时未知列或未知属性处理策
    # NONE:不做任何处理 (默认值)
    # WARNING:以日志的形式打印相关警告信息
    # FAILING:当作映射失败处理,并抛出异常和详细信息
    autoMappingUnknownColumnBehavior: NONE
    # Mybatis一级缓存,默认为 SESSION
    # SESSION session级别缓存,同一个session相同查询语句不会再次查询数据库
    # STATEMENT 关闭一级缓存
    localCacheScope: SESSION
    # 开启Mybatis二级缓存,默认为 true
    cacheEnabled: true
  global-config:
    # 是否打印 Logo banner
    banner: true
    # 是否初始化 SqlRunner
    enableSqlRunner: false
    dbConfig:
      # 主键类型
      # AUTO 数据库ID自增
      # NONE 空
      # INPUT 用户输入ID
      # ASSIGN_ID 全局唯一ID
      # ASSIGN_UUID 全局唯一ID UUID
      idType: AUTO
      # 表名前缀
      tablePrefix: null
      # 字段 format,例: %s,(对主键无效)
      columnFormat: null
      # 表名是否使用驼峰转下划线命名,只对表名生效
      tableUnderline: true
      # 大写命名,对表名和字段名均生效
      capitalMode: false
      # 全局的entity的逻辑删除字段属性名
      logicDeleteField: null
      # 逻辑已删除值
      logicDeleteValue: 2
      # 逻辑未删除值
      logicNotDeleteValue: 0
      # 字段验证策略之 insert,在 insert 的时候的字段验证策略
      # IGNORED 忽略判断
      # NOT_NULL 非NULL判断
      # NOT_EMPTY 非空判断(只对字符串类型字段,其他类型字段依然为非NULL判断)
      # DEFAULT 默认的,一般只用于注解里
      # NEVER 不加入 SQL
      insertStrategy: NOT_NULL
      # 字段验证策略之 update,在 update 的时候的字段验证策略
      updateStrategy: NOT_NULL
      # 字段验证策略之 select,在 select 的时候的字段验证策略既 wrapper 根据内部 entity 生成的 where 条件
      selectStrategy: NOT_NULL

Je suppose que tu aimes

Origine blog.csdn.net/qq_27480007/article/details/130522139
conseillé
Classement