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();
    }
}

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值