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();
    }
}
相关推荐
Java内核笔记3 分钟前
Spring Boot 4 可观测性源码剖析:OpenTelemetry 全链路打通日志、指标、追踪
java·后端
Wang's Blog5 分钟前
Java框架快速入门: Spring Security+OAuth2之跨域处理
java·开发语言·spring
我是大猴子7 分钟前
MyBatis‑Plus & MyBatis‑Flex 区别
java·服务器·数据库
Bs_MoneyMagnet20 分钟前
基于springboot+vue的在线音乐管理系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring
YangYang9YangYan22 分钟前
2026 校招管理会计 JD 拆解,数据分析能力要求与工具清单
java·数据库·数据分析
写后端的胖头鱼34 分钟前
【高频面试题】分布式锁在项目中的应用
java·分布式·后端·分布式锁·高频面试题
CoderYanger38 分钟前
Java EE 进阶:2.3 JavaScript
java·开发语言·前端·javascript·css·职场和发展·java-ee
Wang's Blog1 小时前
Java框架快速入门: Spring Security+OAuth2之前后端分离多模块工程配置
java·spring·状态模式
梅梅绵绵冰1 小时前
SpringCloud网关
java·spring·spring cloud
敲代码的嘎仔1 小时前
互动问答系统实战:两级评论模型、ES 搜索集成、Caffeine 多级缓存全记录
java·开发语言·数据库·elasticsearch·缓存·mybatis·高并发