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();
    }
}
相关推荐
_Evan_Yao1 分钟前
Redis 缓存穿透、击穿、雪崩,一次讲清!
java·spring·mybatis
梓豪csd27 分钟前
消息订阅中心:谁该收到哪条通知
java·开发语言·人工智能·低代码·自动化·1024程序员节
秋饼28 分钟前
Spring AI 2.1 Message Parts 深度实战:推理签名回放与跨轮记忆持久化的源码级落地
java·ai·技术分享·后端开发
thefool1122661 小时前
TCP 1
java·1024程序员节
金銀銅鐵4 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(下)
java·后端·ai编程
AI人工智能+电脑小能手4 小时前
一次请求打几个下游,这个Java并行任务工具类6个方法按序聚合
java·线程池·并发编程·1024程序员节·批量处理·并行任务
paopaokaka_luck6 小时前
心理咨询管理系统(WebSocket实时沟通、基于用户的协同过滤、 ECharts多维分析、 预约业务流程、预约校验与定时处理)
java·vue.js·spring boot·mysql·spring·echarts·1024程序员节
2301_32241428046 小时前
springboot农产品交易平台的设计与实现08055-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·spring boot·redis·mysql·tomcat·maven·mybatis
考虑考虑7 小时前
JDK26的JEP 500属性
java·后端·java ee
LMT流氓兔7 小时前
第五单元——第十二课:把脚本整理成项目
java·数据库·python·langchain·1024程序员节