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();
    }
}
相关推荐
花生智源2 小时前
Java实现Prompt工程的技巧——从模板到工程化,告别字符串拼接
java·人工智能
折哥的程序人生 · 物流技术专研2 小时前
Java 23 种设计模式:从踩坑到精通 | 番外:策略 vs 模板方法 —— 组合与继承的终极对决
java·策略模式·java面试·comparator·模版方法模式·java设计模式·从踩坑到精通
库克克2 小时前
【C++】类和对象--this指针详解
java·开发语言·c++
SL_staff2 小时前
JVS低代码完整源码解析:如何二次开发自己的表单组件?
java·低代码·vuex
QN1幻化引擎2 小时前
Gravity-Anchored Cognitive Field Architecture: The DalinX V8/V10 Implementation
java·前端·算法
一生有你20202 小时前
Spring AI ChatMemory 监控与排查:从指标到排错全链路
java·人工智能·spring
程序员黎剑2 小时前
我把算卦变成了一段if-else
java·vue.js·spring boot·后端·ai编程
头茬韭菜2 小时前
4.1-4.2 工具注册 — Fail-Closed 类型安全设计与四层工具架构
java·安全·架构
SimonKing2 小时前
Base62编码生成6位不重复短码的背后设计
java·后端·程序员