MyBatisPlus代码自动生成器

java 复制代码
package com.wys.interaction.util;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
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.Collections;

/**
 * MyBatisPlus代码自动生成器
 * <p>基于MyBatis-Plus Generator 3.5.x版本,用于自动生成以下代码:</p>
 * <ul>
 *     <li>Entity实体类(包含Lombok注解、链式调用)</li>
 *     <li>Mapper接口及XML映射文件</li>
 *     <li>Service接口及实现类</li>
 *     <li>Controller控制器(RESTful风格)</li>
 * </ul>
 *
 * <p>配置说明:</p>
 * <ul>
 *     <li>数据库:MySQL (version库)</li>
 *     <li>模板引擎:FreeMarker</li>
 *     <li>命名策略:下划线转驼峰</li>
 *     <li>输出目录:wys-interaction模块</li>
 * </ul>
 *
 * @author yswang
 * @since 2026/6/10
 */
public class MyBatisPlusGenerator {

    /**
     * 主方法 - 执行代码生成
     * <p>使用FastAutoGenerator的链式API配置并执行代码生成流程</p>
     *
     * @param args 命令行参数(未使用)
     */
    public static void main(String[] args) {
        // 获取项目根路径
        String projectPath = System.getProperty("user.dir");

        // 创建FastAutoGenerator实例并配置数据源
        FastAutoGenerator.create(
                        "jdbc:mysql://localhost:3306/dev_wys_interaction?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai",
                        "root",
                        "wys@1234"
                )
                // 全局配置:输出目录、作者、日期类型等
                .globalConfig(builder -> {
                    builder.outputDir(projectPath + "/wys-interaction/src/main/java")
                            .author("yswang")
                            .dateType(DateType.TIME_PACK)
                            .disableOpenDir();
                })
                // 包配置:父包名、各层子包名、XML文件路径
                .packageConfig(builder -> {
                    builder.parent("com.wys.interaction")
                            .entity("entity")
                            .mapper("mapper")
                            .service("service")
                            .serviceImpl("service.impl")
                            .controller("controller")
                            .pathInfo(Collections.singletonMap(
                                    com.baomidou.mybatisplus.generator.config.OutputFile.xml,
                                    projectPath + "/wys-interaction/src/main/resources/mapper"
                            ));
                })
                // 策略配置:表名、命名规则、功能开关等
                .strategyConfig(builder -> {
                    builder.addInclude("object_comment")
                            //.addTablePrefix("object_") // 去掉表名前缀,一般不需要
                            // Entity实体类构建配置
                            .entityBuilder()
                            .enableFileOverride()//覆盖已生成文件
                            .naming(NamingStrategy.underline_to_camel)//表名命名策略:将数据库表名的下划线风格转换为 Java 类名的驼峰风格
                            .columnNaming(NamingStrategy.underline_to_camel)//列名命名策略:将数据库表的列名转换为 Java 属性的命名风格
                            .enableLombok()//启用Lombok
                            .enableTableFieldAnnotation()//添加实体类字段的注释,在实体类的每个字段上添加 @TableField 注解
                            //.logicDeleteColumnName("deleted")//逻辑删除字段名,指定数据库中用于逻辑删除的列名为 deleted
                            .enableRemoveIsPrefix()//移除实体类属性的 is 前缀,is_deleted → deleted(而不是 isDeleted)
                            .enableChainModel()//启用链式模型,生成的 setter 方法返回当前对象(this),支持链式调用
                            .build()
                            // Mapper接口构建配置
                            .mapperBuilder()
                            .enableFileOverride()//覆盖已生成文件
                            .enableBaseResultMap()
                            .enableBaseColumnList()
                            .build()
                            // Service层构建配置
                            .serviceBuilder()
                            .enableFileOverride()//覆盖已生成文件
                            .formatServiceFileName("%sService")
                            .formatServiceImplFileName("%sServiceImpl")
                            .build()
                            // Controller层构建配置
                            .controllerBuilder()
                            .enableFileOverride()//覆盖已生成文件
                            .formatFileName("%sController")
                            .enableRestStyle()
                            .build();
                })
                // 指定使用FreeMarker模板引擎
                .templateEngine(new FreemarkerTemplateEngine())
                // 执行代码生成
                .execute();
    }
}
相关推荐
玖石书1 小时前
ASP.NET Core 迁移至 Spring系列:类库框架篇
java·后端·asp.net
摇滚侠2 小时前
《SpringBoot 3:入门与应用实战》第 15 章 生产级特性 监控指标 Metrics 阅读笔记
java·spring boot·笔记
骇客野人2 小时前
IDEA 安装 Trae(TRAE AI: Coding Assistant)完整步骤
java·ide·intellij-idea
弹简特2 小时前
【Java项目-企悦抽】11-用户与认证模块-实现用户登录03(结束登录功能)-完成测试+对接前端+登录拦截器
java·开发语言
大模型丫丫2 小时前
Loop Engineering:从强化学习视角看 Agent 循环的本质
java·人工智能·学习
数电发票API3 小时前
税局接口,需要的来~~
java
骇客野人3 小时前
IntelliJ IDEA 使用技巧
java·ide·intellij-idea
Jul1en_3 小时前
【Java 脚手架】封装通用工具类-1
java·spring boot·分布式·spring·spring cloud
我命由我123454 小时前
Java 开发 - List subList 方法
java·windows·操作系统·list·intellij-idea·idea·intellij idea
关于不上作者榜就原神启动那件事4 小时前
从 MDC 到 Agent:我手搓的文档路由协议,在 Spring AI Alibaba 里找到了正式实现
java·人工智能·spring·ai·agent