MyBatisPlus逆向工程

依赖

 <!--Mybatis-plus逆向生成器依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.4.1</version>
        </dependency>
        <!--Mybatis-plus逆向生成器的Freemarker模板引擎-->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.31</version>
        </dependency>

代码

package com.admin.util;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * @Author: huangjun
 * @Date: 2024/1/8 17:02
 * @Version: 1.0
 * @Description:
 */
public class Generator {
   


    private final static AutoGenerator autoGenerator = new AutoGenerator();

    /**
     * 全局配置  生成路径
     */
    private final static String GLOBAL_PROJECT_PATH = System.getProperty("user.dir");
    //全局配置 作者
    private final static String GLOBAL_AUTHOR = "huangjun";


    /**
     * 数据库配置信息
     */
    private final static String JDBC_URL = "jdbc:mysql://localhost:3306/mywork?useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai";
    private final static String JDBC_USERNAME = "root";
    private final static String JDBC_PASSWORD = "root";
    private final static String JDBC_DRIVERNAME = "com.mysql.cj.jdbc.Driver";
    private final static DbType JDBC_DBTYPE = DbType.MYSQL;

    /**
     * 包信息配置
     */
    private final static String PACKAGE_PARENT = "com.admin";
    private final static String PACKAGE_CONTROLLER = "controller";
    private final static String PACKAGE_ENTITY = "entity";
    private final static String PACKAGE_MAPPER = "mapper";
    private final static String PACKAGE_SERVICE = "service";
    private final static String PACKAGE_SERVICE_IMPL = "service.impl";

    /**
     * 模板文件路径
     */
    private final static String XML_TEMPLATE_PATH = "/templates/mapper.xml.ftl";
    private final static String MAPPER_TEMPLATE_PATH = "/templates/mapper.java.ftl";
    private final static String SERVICE_TEMPLATE_PATH = "/templates/service.java.ftl";
    private final static String SERVICE_IMPL_TEMPLATE_PATH = "/templates/serviceImpl.java.ftl";
    private final static String ENTITY_TEMPLATE_PATH = "/templates/entity.java.ftl";
    private final static String CONTROLLER_TEMPLATE_PATH = "/templates/controller.java.ftl";

    /**
     * 项目信息
     */
    private final static String PARENT_REAL_PATH = GLOBAL_PROJECT_PATH + "/src/main/java/com/admin";
    private final static String CONTROLLER_REAL_PATH = PARENT_REAL_PATH + "/controller/";
    private final static String SERVICE_REAL_PATH = PARENT_REAL_PATH + "/service/";
    private final static String SERVICE_IMPL_REAL_PATH = PARENT_REAL_PATH + "/service/impl/";
    private final static String MAPPER_XML_REAL_PATH = GLOBAL_PROJECT_PATH + "/src/main/resources/mapper/";
    private final static String MAPPER_JAVA_REAL_PATH = PARENT_REAL_PATH + "/mapper/";
    private final static String ENTITY_REAL_PATH = PARENT_REAL_PATH + "/entity/";

    /**
     * 逆向生成类去除表名的前缀
     */
    private final static String STRATEGY_TABLE_PREFIX = "";


    /**
     * 数据源的配置
     */
    private static void dataSourceConfig(){
   
        DataSourceConfig dataSourceConfig = new DataSourceConfig().setUrl(JDBC_URL)
                .setUsername(JDBC_USERNAME)
                .setPassword(JDBC_PASSWORD)
                .setDriverName(JDBC_DRIVERNAME)
                .setDbType(JDBC_DBTYPE);
        autoGenerator.setDataSource(dataSourceConfig);
    }

    /**
     * 全局配置
     */
    private static void globalConfig(){
   
        GlobalConfig globalConfig = new GlobalConfig();
        // 输出文件路径
        globalConfig.setOutputDir(GLOBAL_PROJECT_PATH + "/src/main/java")
                // 设置作者名字
                .setAuthor(GLOBAL_AUTHOR)
                // 是否打开资源管理器
                .setOpen(false)
                // 是否覆盖原来生成的
                .setFileOverride(true)
                // 主键策略
                .setIdType(IdType.AUTO)
                // 生成resultMap
                .setBaseResultMap(true)
                // 设置时间格式,采用Date
                .setDateType(DateType.ONLY_DATE)
                // 生成的service接口名字首字母是否为I
                .setServiceName("I%sService")
                //XML中生成基础列
                .setBaseColumnList(true);
        autoGenerator.setGlobalConfig(globalConfig);
    }

    /**
     * 包属性的配置
     */
    private static void packageConfig(){
   
        // 配置指定项目中各层的名称
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setParent(PACKAGE_PARENT)
                // Controller层
                .setController(PACKAGE_CONTROLLER)
                // 实体层(pojo层)
                .setEntity(PACKAGE_ENTITY)
                // Dao 层
                .setMapper(PACKAGE_MAPPER)
                // service层
                .setService(PACKAGE_SERVICE)
                // ServiceImp层
                .setServiceImpl(PACKAGE_SERVICE_IMPL);
        autoGenerator.setPackageInfo(packageConfig);
    }

    /**
     * 逆向生成类的名称配置
     */
    private static void strategyConfig(){
   
        StrategyConfig strategyConfig = new StrategyConfig();
        // 开启全局大写命名
        strategyConfig
                // 设置要映射的表
                .setInclude(INCLUDE_TABLES.split(","))
                .setCapitalMode(true)
                // 下划线到驼峰的命名方式
                .setNaming(NamingStrategy.underline_to_camel)
                // 下划线到驼峰的命名方式
                .setColumnNaming(NamingStrategy.underline_to_camel)
                // 是否使用lombok
                .setEntityLombokModel(true)
                // 是否开启rest风格
                .setRestControllerStyle(true)
                // 去除前缀
                .setTablePrefix(STRATEGY_TABLE_PREFIX)
                .setControllerMappingHyphenStyle(true);
        autoGenerator.setStrategy(strategyConfig);
        autoGenerator.setTemplateEngine(new FreemarkerTemplateEngine());
    }

    /**
     * 在resource目录下生成Mapper文件的配置
     */
    private static void injectionConfig(){
   
        InjectionConfig injectionConfig = new InjectionConfig() {
   
            @Override
            public void initMap() {
   
                this.setMap(new HashMap<>());
            }
        };
        List<FileOutConfig> fileOutConfigList = new ArrayList<>();
        // 根据/templates/mapper.xml.ftl规则在指定的位置生成Mapper文件,可以在多个地方生成。
        fileOutConfigList.add(new FileOutConfig(XML_TEMPLATE_PATH) {
   
            @Override
            public String outputFile(TableInfo tableInfo) {
   
                // 返回Mapper文件的绝对路径
                return MAPPER_XML_REAL_PATH +
                        tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });
        // 将对Mapper文件的配置添加到文件输出对象中
        injectionConfig.setFileOutConfigList(fileOutConfigList);
        autoGenerator.setCfg(injectionConfig);
    }

    /**
     * java文件的的配置
     */
    private static void initInjectionConfigForJava(){
   

        InjectionConfig injectionConfig = new InjectionConfig() {
   
            @Override
            public void initMap() {
   
                // 实现InjectionConfig抽象类就需要初始化一个Map集合
                this.setMap(new HashMap<>());
            }
        };

        List<FileOutConfig> fileOutConfigList = new ArrayList<>();

        //mapper.java的文件路径配置
        fileOutConfigList.add(new FileOutConfig(MAPPER_TEMPLATE_PATH) {
   
            @Override
            public String outputFile(TableInfo tableInfo) {
   
                return MAPPER_JAVA_REAL_PATH
                        + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_JAVA;
            }
        });
        //service.java的文件路径配置
        fileOutConfigList.add(new FileOutConfig(SERVICE_TEMPLATE_PATH) {
   
            @Override
            public String outputFile(TableInfo tableInfo) {
   
                return SERVICE_REAL_PATH
                        + "I" + tableInfo.getEntityName() + "Service" + StringPool.DOT_JAVA;
            }
        });

        //serviceImpl.java的文件路径配置
        fileOutConfigList.add(new FileOutConfig(SERVICE_IMPL_TEMPLATE_PATH) {
   
            @Override
            public String outputFile(TableInfo tableInfo) {
   
                return SERVICE_IMPL_REAL_PATH
                        + tableInfo.getEntityName() + "ServiceImpl" + StringPool.DOT_JAVA;
            }
        });

        //controller.java的文件路径配置
        fileOutConfigList.add(new FileOutConfig(CONTROLLER_TEMPLATE_PATH) {
   
            @Override
            public String outputFile(TableInfo tableInfo) {
   
                return CONTROLLER_REAL_PATH
                        + tableInfo.getEntityName() + "Controller" + StringPool.DOT_JAVA;
            }
        });

        //entity.java
        fileOutConfigList.add(new FileOutConfig(ENTITY_TEMPLATE_PATH) {
   
            @Override
            public String outputFile(TableInfo tableInfo) {
   
                return ENTITY_REAL_PATH
                        + tableInfo.getEntityName() + StringPool.DOT_JAVA;
            }
        });
        injectionConfig.setFileOutConfigList(fileOutConfigList);
        autoGenerator.setCfg(injectionConfig);
    }

    /**
     * 配置生成器的生成模板
     */
    private static void templateConfig() {
   
        TemplateConfig templateConfig = new TemplateConfig();
        templateConfig.setXml(null);
        autoGenerator.setTemplate(templateConfig);
    }

    //初始化
    static {
   
        globalConfig();
        dataSourceConfig();
        packageConfig();
        strategyConfig();
        injectionConfig();
        //initInjectionConfigForJava();
        templateConfig();
    }


    private final static String INCLUDE_TABLES ="student";

    public static void main(String[] args) {
   
        autoGenerator.execute();
    }
}

相关推荐

  1. MyBatisPlus逆向工程

    2024-01-13 23:48:03       28 阅读
  2. android 逆向工程(待续)

    2024-01-13 23:48:03       41 阅读
  3. Mybatis逆向工程

    2024-01-13 23:48:03       43 阅读
  4. 关于Mac配置逆向工程

    2024-01-13 23:48:03       11 阅读
  5. MybatisPlus

    2024-01-13 23:48:03       44 阅读
  6. MybatisPlus

    2024-01-13 23:48:03       28 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-13 23:48:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-13 23:48:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-13 23:48:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-13 23:48:03       20 阅读

热门阅读

  1. 【蓝桥备赛】wzy的数组Ⅱ——简单莫队问题

    2024-01-13 23:48:03       46 阅读
  2. Python系列(1):简洁优雅,功能强大的编程语言

    2024-01-13 23:48:03       47 阅读
  3. 【spring源码分析】@Conditional的使用以及分析

    2024-01-13 23:48:03       37 阅读
  4. 用几行Asp代码实现防止表单多次被提交

    2024-01-13 23:48:03       47 阅读
  5. ssh远程登陆

    2024-01-13 23:48:03       43 阅读
  6. 玉米花快要发芽 的第二天

    2024-01-13 23:48:03       43 阅读
  7. 关于基于STM32使用外部中断控制按键

    2024-01-13 23:48:03       45 阅读
  8. vscode运行Python的两种方法,及无法运行的原因

    2024-01-13 23:48:03       47 阅读
  9. day04打卡

    2024-01-13 23:48:03       44 阅读
  10. 如何允许远程访问 MySQL

    2024-01-13 23:48:03       44 阅读
  11. ZooKeeper

    ZooKeeper

    2024-01-13 23:48:03      34 阅读