SpringBoot combiné avec MyBatis Plus pour générer automatiquement du code

SpringBoot combiné avec MyBatis Plus pour générer automatiquement du code

À l'origine, ce chapitre voulait introduire les autorisations d'optimisation Redis + AOP, mais je dois encore introduire d'abord du code de génération automatique MyBatis Plus.

Introduction à MyBatis Plus

MyBatis-Plus (ouvre une nouvelle fenêtre) (MP en abrégé) est un outil d'amélioration de MyBatis (ouvre une nouvelle fenêtre). Sur la base de MyBatis, seules des améliorations sont apportées sans changement. Il est né pour simplifier le développement et améliorer l'efficacité.

Fonctionnalités MyBatis Plus

  • Aucune intrusion: ne faites que des améliorations sans apporter de modifications, son introduction n'affectera pas le projet existant, il est aussi lisse que de la soie
  • Faible perte: le CURD de base sera automatiquement injecté au démarrage, les performances sont essentiellement sans perte, fonctionnement direct orienté objet
  • Opérations CRUD puissantes: mappeur général intégré, service général, seule une petite quantité de configuration peut réaliser la plupart des opérations CRUD d'une seule table et un générateur de conditions plus puissant pour répondre à diverses exigences d'utilisation
  • Prise en charge de l'appel de formulaire Lambda: via les expressions Lambda, il est pratique d'écrire diverses conditions de requête, pas besoin de s'inquiéter d'écrire de mauvais champs
  • Prend en charge la génération automatique de clés primaires: prend en charge jusqu'à 4 stratégies de clé primaire (contient une séquence de générateur d'identifiant unique distribuée), qui peut être librement configurée pour résoudre parfaitement les problèmes de clé primaire
  • Prise en charge du mode ActiveRecord: prise en charge de l'appel de formulaire ActiveRecord, les classes d'entité doivent uniquement hériter de la classe Model pour effectuer de puissantes opérations CRUD
  • Prise en charge des opérations générales globales personnalisées: prise en charge de l'injection de méthode générale globale (écriture unique, utilisation n'importe où)
  • Générateur de code intégré: utilisez le code ou le plug-in Maven pour générer rapidement un mappeur, un modèle, un service, un code de couche de contrôleur, un moteur de modèle de prise en charge et d'autres configurations personnalisées à utiliser
  • Plug-in de pagination intégré: basé sur la pagination physique MyBatis, les développeurs n'ont pas besoin de se soucier d'opérations spécifiques. Après avoir configuré le plug-in, l'écriture de pagination équivaut à une requête de liste ordinaire
  • Le plug-in de pagination prend en charge plusieurs bases de données: prend en charge MySQL, MariaDB, Oracle, DB2, H2, HSQL, SQLite, Postgre, SQLServer et d'autres bases de données
  • Plug-in d'analyse des performances intégré: l'instruction SQL et son temps d'exécution peuvent être générés. Il est recommandé d'activer cette fonction pendant le développement et les tests pour détecter rapidement les requêtes lentes
  • Plug-in d'interception globale intégré: fournit une analyse et un blocage intelligents des opérations de suppression et de mise à jour de table complète, et peut également personnaliser les règles d'interception pour éviter toute mauvaise opération

    Base de données d'assistance MyBatis Plus

Toute base de données qui peut utiliser mybatis pour crud et prend en charge SQL standard

Cadre

SpringBoot combiné avec MyBatis Plus pour générer automatiquement du code

Générateur de code MyBatis Plus

AutoGenerator est le générateur de code de MyBatis-Plus. Grâce à AutoGenerator, vous pouvez générer rapidement le code de Entity, Mapper, Mapper XML, Service, Controller et d'autres modules, ce qui améliore considérablement l'efficacité du développement.

Utiliser le tutoriel

Ajouter une dépendance au générateur de code


<!--lombok依赖-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!--集成druid连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <!--Mysql数据库驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.10</version>
        </dependency>
        <!--MyBatis Plus 依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.2</version>
        </dependency>
        <!--MyBatis Plus 代码生成器-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.3.2</version>
        </dependency>
        <!--Hutool Java工具包-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>4.5.7</version>
        </dependency>
        <!--Velocity模板引擎-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.2</version>
        </dependency>
        <!--Swagger-UI API文档生产工具-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.7.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.7.0</version>
        </dependency>

Ajouter une dépendance au moteur de modèle

MyBatis-Plus prend en charge Velocity (par défaut), Freemarker, Beetl et les utilisateurs peuvent choisir un moteur de modèle avec lequel ils sont familiers. S'il ne répond pas à vos besoins, vous pouvez utiliser un moteur de modèle personnalisé. Cet article utilise les dépendances par défaut

<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.2</version>
</dependency>

Ecrire la configuration

Le générateur de code MyBatis-Plus fournit un grand nombre de paramètres personnalisés que les utilisateurs peuvent choisir, ce qui peut répondre aux besoins de la plupart des gens.

Configurer GlobalConfig

Configuration globale de la stratégie globaleConfig

outputDir

  • Répertoire de sortie des fichiers générés
  • Valeur par défaut:
    fichier de répertoire racine du disque D
  • S'il faut écraser les fichiers existants
  • Valeur par défaut: faux
    ouvert
  • S'il faut ouvrir le répertoire de sortie
  • Valeur par défaut: true
    enableCache
  • S'il faut ajouter une configuration de cache secondaire dans xml
  • Valeur par défaut: faux
    auteur
  • Développeur
  • Valeur par défaut: null
    kotlin
  • Activer le mode Kotlin
  • Valeur par défaut: false
    swagger2
  • Ouvrir le mode swagger2
  • Valeur par défaut: false
    activeRecord
  • Activer le mode ActiveRecord
  • Valeur par défaut: false
    baseResultMap
  • Ouvrir BaseResultMap
  • Valeur par défaut: false
    baseColumnList
  • Ouvrir la baseColumnList
  • Valeur par défaut: false
    dateType
  • Stratégie correspondante du type de temps
  • Valeur par défaut: TIME_PACK
    Remarques:

Configurez% s comme espace réservé comme suit

entityName

  • Dénomination des entités
  • Valeur par défaut: null Par exemple:% sEntity génère UserEntity
    mapperName
  • méthode de dénomination du mappeur
  • Valeur par défaut: null Par exemple:% sDao génère UserDao
    xmlName
  • Méthode de dénomination XML Mapper
  • Valeur par défaut: null Par exemple:% sDao génère UserDao.xml
    serviceName
  • Méthode de dénomination du service
  • Valeur par défaut: null Par exemple:% sBusiness génère le
    service UserBusinessImplName
  • méthode de dénomination implicite de service
  • Valeur par défaut: null Par exemple:% sBusinessImpl génère UserBusinessImpl
    controllerName
  • Méthode de dénomination du contrôleur
  • Valeur par défaut: null Par exemple:% sAction génère UserAction
    idType
  • Spécifiez le type d'ID de la clé primaire générée
  • Valeur par défaut: null
/**
     * 全局配置
     * @param projectPath
     * @return
     */
    public static GlobalConfig initGlobal(String projectPath){
        GlobalConfig gc = new GlobalConfig();
        gc.setOutputDir(projectPath + "/src/main/java");
        gc.setAuthor("zbb");
        gc.setOpen(false);
        gc.setSwagger2(true);
        gc.setBaseResultMap(true);
        gc.setFileOverride(true);
        gc.setDateType(DateType.ONLY_DATE);
        gc.setEntityName("%s");
        gc.setMapperName("%sMapper");
        gc.setXmlName("%sMapper");
        gc.setServiceName("%sService");
        gc.setServiceImplName("%sServiceImpl");
        gc.setControllerName("%sController");
        return gc;

    }

Configurer DataSourceConfig

dbQuery

  • Requête d'informations sur la base de données
  • La valeur par défaut est déterminée par le type de dbType. Choisissez l'implémentation intégrée de la base de données correspondante pour implémenter l'interface IDbQuery. Personnalisez l'instruction SQL de requête de base de données. Renvoyez le contenu dont vous avez besoin
    dbType
  • Type de base de données
  • Cette classe a des types de base de données intégrés couramment utilisés [Obligatoire]
    schemaName
  • Nom du schéma de base de données
  • Par exemple, PostgreSQL peut être spécifié comme publictypeConvert
  • Conversion de type
  • La valeur par défaut est déterminée par le type dbType. Choisissez l'implémentation intégrée de base de données correspondante pour implémenter l'interface ITypeConvert. Le type de champ de base de données personnalisé est converti en type Java dont vous avez besoin. Le type de conversion intégré ne peut pas satisfaire l'implémentation de l'
    URL personnalisée de l'interface IColumnType
  • URLdriverName de la connexion du pilote
  • Nom d'utilisateur du pilote
  • Mot de passe du nom d'utilisateur de connexion à la base de données
  • Mot de passe de connexion à la base de données
/**
     *
     * 配置 DataSourceConfig
     * @return
     */
    public  static DataSourceConfig initDataSource(){
        Props props = new Props("application.properties");
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setUrl(props.getStr("dataSource.url"));
        dataSourceConfig.setDriverName(props.getStr("dataSource.driverName"));
        dataSourceConfig.setUsername(props.getStr("dataSource.username"));
        dataSourceConfig.setPassword(props.getStr("dataSource.password"));
        return dataSourceConfig;
    }

Configuration du package Configuration du nom du package

parent

  • Nom du package parent. S'il est vide, le nom du sous-package suivant doit être écrit en
    entier , sinon, seul le nom du sous-package moduleName

  • Entité de nom de module de package parent

  • Service de nom de package d'entité
  • Service de nom de package de
    service serviceImpl
  • Service Impl Nom du package
    mappeur
  • Nom du package du mappeur
    xml

  • Contrôleur de nom de package XML Mapper
  • Nom du package du contrôleur
    pathInfo
  • Informations de configuration de chemin
/**
     * 包配置
     * @param packname
     * @return
     */
    public  static  PackageConfig initPackage(String packname){
        Props props = new Props("application.properties");
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setModuleName(packname);
        packageConfig.setParent(props.getStr("package.base"));
        packageConfig.setEntity("model");
        return packageConfig;
    }

Configuration du modèle TemplateConfig

entité


  • Modèle de classe d'entité Java entityKt

  • Service de modèle de classe d'entité Kotin
  • Service de modèle de classe de
    service serviceImpl
  • Service impl modèle de classe mise en œuvre
    mappeur
  • modèle de mappeur
    xml

  • contrôleur de modèle mapper xml
  • modèle de contrôleur de contrôleur
/**
     * 模板配置
     * @return
     */
    public static TemplateConfig initTemplate() {
        TemplateConfig templateConfig = new TemplateConfig();
        //可以对controller、service、entity模板进行配置
        templateConfig.setXml(null);
        return templateConfig;
    }

Injection d'attributs personnalisés dans InjectionConfig

carte

  • Objet de carte de configuration de retour personnalisé
  • L'objet peut être transmis au moteur de modèle par le fichier de référence
    cfg.xxxOutConfigList
  • Fichier de sortie personnalisé
  • Configurez FileOutConfig pour spécifier les fichiers de modèle et les fichiers de sortie afin d'atteindre l'objectif de génération de fichier personnalisé
    fileCreate
  • Personnaliser s'il faut créer un fichier
  • Implémenter l'interface IFileCreate

    Cette configuration est utilisée pour déterminer si une certaine classe doit être écrasée et créée. Bien sûr, vous pouvez implémenter vous-même le fichier de fusion de l'algorithme de différence

initMap

  • Injectez un objet Map personnalisé (notez que vous devez le mettre dans setMap)
/**
     * 自定义属性注入
     */
    public static InjectionConfig initInjection(String projectPath, String moduleName) {
        // 自定义配置
        InjectionConfig injectionConfig = new InjectionConfig() {
            @Override
            public void initMap() {
                // 可用于自定义属性
            }
        };
        // 模板引擎是Velocity
        String templatePath = "/templates/mapper.xml.vm";
        // 自定义输出配置
        List<FileOutConfig> focList = new ArrayList<>();
        // 自定义配置会被优先输出
        focList.add(new FileOutConfig(templatePath) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
                return projectPath + "/src/main/resources/mapper/" + moduleName
                        + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });
        injectionConfig.setFileOutConfigList(focList);
        return injectionConfig;
    }

Stratégie de configuration de la stratégie StrategyConfig

 /**
     * 策略配置
     */
    public static StrategyConfig initStrategy(String[] tableNames) {
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig.setNaming(NamingStrategy.underline_to_camel);
        strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);
        strategyConfig.setEntityLombokModel(true);
        strategyConfig.setRestControllerStyle(true);
        //当表名中带*号时可以启用通配符模式
        if (tableNames.length == 1 && tableNames[0].contains("*")) {
            String[] likeStr = tableNames[0].split("_");
            String likePrefix = likeStr[0] + "_";
            strategyConfig.setLikeTable(new LikeTable(likePrefix));
        } else {
            strategyConfig.setInclude(tableNames);
        }
        return strategyConfig;
    }

Générateur de code

 public static void main(String[] args) {
        String projectPath = System.getProperty("user.dir");
        String moduleName = scanner("模块名");
        String[] tableNames = scanner("表名,多个英文逗号分割").split(",");
        // 代码生成器
        AutoGenerator autoGenerator = new AutoGenerator();
        autoGenerator.setGlobalConfig(initGlobal(projectPath));
        autoGenerator.setDataSource(initDataSource());
        autoGenerator.setPackageInfo(initPackage(moduleName));
        autoGenerator.setCfg(initInjection(projectPath, moduleName));
        autoGenerator.setTemplate(initTemplate());
        autoGenerator.setStrategy(initStrategy(tableNames));
        autoGenerator.setTemplateEngine(new VelocityTemplateEngine());
        autoGenerator.execute();
    }

Lire le contenu de la console

 /**
     * <p>
     * 读取控制台内容
     * </p>
     */
    public static String scanner(String tip) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder help = new StringBuilder();
        help.append("请输入" + tip + ":");
        System.out.println(help.toString());
        if (scanner.hasNext()) {
            String ipt = scanner.next();
            if (StrUtil.isNotEmpty(ipt)) {
                return ipt;
            }
        }
        throw new MybatisPlusException("请输入正确的" + tip + "!");
    }

Configurer application.properties

dataSource.url=jdbc:mysql://db:3306/mymes?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
dataSource.driverName=com.mysql.jdbc.Driver
dataSource.username=reader
dataSource.password=123456
package.base=com.springboot.mymes_demo.modules

Exécuter le code

SpringBoot combiné avec MyBatis Plus pour générer automatiquement du code
Remarque:
entrez xx_ * lors de la saisie pour indiquer toutes les tables avec le préfixe xx. Si le nom complet est saisi, la table correspondante sera générée

le public

SpringBoot combiné avec MyBatis Plus pour générer automatiquement du code
Compte officiel https://mp.weixin.qq.com/s/nfat2WWWUXdmfUGFBAVEuA

Je suppose que tu aimes

Origine blog.51cto.com/15077535/2593736
conseillé
Classement