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();
    }
}
相关推荐
山甫aa17 小时前
日志技术 Logback + Slf4j —— 从零开始的 Web 后端学习
java·后端·学习·web·logback
韶博雅17 小时前
开启补充日志
java·开发语言·sql
FYKJ_201017 小时前
django学习成绩预警系统10905
java·javascript·spring boot·python·spark·django·php
卓怡学长17 小时前
w192基于springboot教务管理系统
java·数据库·spring boot·spring·maven·intellij-idea
逸Y 仙X17 小时前
Spark SQL
java·大数据·sql·spark
码农颜17 小时前
6.4.1 监听连接
java·数据库·mysql
mldong17 小时前
会签三兄弟:并行/串行/按比例的实现与取舍
java·架构
Java后端的Ai之路18 小时前
01、Python - 设计模式介绍
java·人工智能·python·设计模式·通用
zzzll111118 小时前
大模型技术原理与应用实践
java·数据库·人工智能
asdfg125896318 小时前
java.util包中的ArrayList&&Collections的目的和用途
java·arraylist·collections