Bootstrap

MybatisPlusAutoGenerator代码自动生成器详解(新)

本文给大家介绍新版MybatisPlusAutoGenerator代码自动生成器的使用方式

一、添加依赖

<!-- MybatisPlus代码自动生成器 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.3.1</version>
</dependency>
<!-- 默认模板引擎 -->
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.3</version>
</dependency>

新版代码生成器仅支持3.5.1及以上版本。本文使用的是3.5.3.1版本,大家也可以去下载最新版本。
除了mybatis-plus-generator的依赖以外,还添加了模板引擎的依赖velocity-engine-core,注意了,没有模板引擎的依赖运行是会报错的!

二、编写工具类

public class MybatisPlusAutoGeneratorUtil {

    public static void execute(){
    	//配置数据库参数
        DataSourceConfig.Builder config = new DataSourceConfig.Builder(
                "sql_url",
                "username",
                "password");
        //mybatisPlus总共支持6种配置
        FastAutoGenerator.create(config)
                //全局配置
                .globalConfig((scanner,builder)  -> {
                    //配置作者
                    builder.author("author")
                            //配置时间
                            .commentDate("yyyy-MM-dd")
                            //输出目录
                            .outputDir("D:\\mybatisPlus");
                })
                //包配置
                .packageConfig((scanner,builder) -> {
                    //配置父包名
                    builder.parent("your.package.name");
                })
                //策略配置
                .strategyConfig((scanner,builder)  -> {
                    // 设置需要生成的表名
                    builder.addInclude("table_name")
                            //配置模型
                            .entityBuilder().enableFileOverride()
                            //配置控制器
                            .controllerBuilder().enableRestStyle().enableFileOverride()
                            //配置服务
                            .serviceBuilder().enableFileOverride()
                            //配置Mapper
                            .mapperBuilder().enableFileOverride();
                })
                //模板配置
                .templateConfig((scanner,builder)->{
                    //配置不需要生成的文件
//                  builder.disable(TemplateType.CONTROLLER,TemplateType.SERVICE,TemplateType.SERVICE_IMPL);
                })
                //注入配置
//                .injectionConfig((scanner,builder)  ->{})
                //模板引擎配置
//                .templateConfig(builder->{})
                .execute();
    }

    public static void main(String[] args) {
        MybatisPlusAutoGeneratorUtil.execute();
    }
}

上面是工具类的模板,填上你自己的配置就可以使用了。
当然,接下来会大致介绍一下mybatis-plus-generator有哪些功能,以便读者可以自定义自己的代码自动生成器。

三、功能说明

这里先附上官方文档,不过官方文档只有例子,没有详细的说明。
Mybatis-Plus代码生成器(新)官方文档

mybatis-plus-generator除了数据库配置外,一共有6种配置,全局配置包配置策略配置模板配置注入配置模板引擎配置。所以总共来说一共有7个。

1.数据库配置

数据库配置其实主要就是3个,数据库访问路径,用户名还有密码,这就够了。如上图中的代码

//配置数据库参数
DataSourceConfig.Builder config = new DataSourceConfig.Builder(
		//访问路径
        "sql_url",
        //用户名
        "username",
        //密码
        "password");

创建好配置就可以正式开始配置代码生成器了

FastAutoGenerator.create(config);

代码生成器使用FastAutoGenerator的静态方法create()来创建。

2.全局配置
 FastAutoGenerator.create(config)
                //全局配置
                .globalConfig((scanner,builder)  -> {
                    //配置作者
                    builder.author("author")
                            //配置时间
                            .commentDate("yyyy-MM-dd")
                            //输出目录
                            .outputDir("D:\\mybatisPlus");
                })

全局配置可以配置,作者,创建时间,输出目录,开启swagger,开启springdoc等,更多功能可以查看源代码的GlobalConfig类,如下图所示

    /**
     * 生成文件的输出目录【 windows:D://  linux or mac:/tmp 】
     */
    private String outputDir = System.getProperty("os.name").toLowerCase().contains("windows") ? "D://" : "/tmp";

    /**
     * 是否覆盖已有文件(默认 false)(已迁移到策略配置中,3.5.4版本会删除此方法)
     */
    @Deprecated
    private boolean fileOverride;

    /**
     * 是否打开输出目录
     */
    private boolean open = true;

    /**
     * 作者
     */
    private String author = "baomidou";

    /**
     * 开启 Kotlin 模式(默认 false)
     */
    private boolean kotlin;

    /**
     * 开启 swagger 模式(默认 false 与 springdoc 不可同时使用)
     */
    private boolean swagger;
    /**
     * 开启 springdoc 模式(默认 false 与 swagger 不可同时使用)
     */
    private boolean springdoc;

    /**
     * 时间类型对应策略
     */
    private DateType dateType = DateType.TIME_PACK;

    /**
     * 获取注释日期
     *
     * @since 3.5.0
     */
    private Supplier<String> commentDate = () -> new SimpleDateFormat("yyyy-MM-dd").format(new Date());

    /**
     * 是否生成service 接口(默认 true)
     * 增加此开关的原因:在某些项目实践中,只需要生成service实现类,不需要抽象sevice接口
     * 针对某些项目,生成service接口,开发时反而麻烦,这种情况,可以将该属性设置为false
     */
    private boolean serviceInterface = true;

    public String getOutputDir() {
        return outputDir;
    }

3.包配置

 FastAutoGenerator.create(config)
                //包配置
                .packageConfig((scanner,builder) -> {
                    //配置父包名
                    builder.parent("your.package.name");
                })

包配置可以配置父包名,Service包名,Service Impl包名,Controller包名,Mapper包名,Entity包名等,更多功能查看源码PackageConfig类,如下图

 private String parent = "com.baomidou";

    /**
     * 父包模块名
     */
    private String moduleName = "";

    /**
     * Entity包名
     */
    private String entity = "entity";

    /**
     * Service包名
     */
    private String service = "service";

    /**
     * Service Impl包名
     */
    private String serviceImpl = "service.impl";

    /**
     * Mapper包名
     */
    private String mapper = "mapper";

    /**
     * Mapper XML包名
     */
    private String xml = "mapper.xml";

    /**
     * Controller包名
     */
    private String controller = "controller";

    /**
     * 路径配置信息
     */
    private Map<OutputFile, String> pathInfo;

    /**
     * 包配置信息
     *
     * @since 3.5.0
     */
    private final Map<String, String> packageInfo = new HashMap<>();
4.策略配置
 FastAutoGenerator.create(config)
                //策略配置
                .strategyConfig((scanner,builder)  -> {
                    // 设置需要生成的表名
                    builder.addInclude("table_name")
                            //配置模型
                            .entityBuilder().enableFileOverride()
                            //配置控制器
                            .controllerBuilder().enableRestStyle().enableFileOverride()
                            //配置服务
                            .serviceBuilder().enableFileOverride()
                            //配置Mapper
                            .mapperBuilder().enableFileOverride();
                })

可以配置要生成代码的表名,过滤表前缀,过滤表后缀,配置控制器,模型,服务,Mapper的生成规则,是否覆盖原文件等,更多功能查看源码StrategyConfig类,如下图

    /**
     * 是否大写命名(默认 false)
     */
    private boolean isCapitalMode;

    /**
     * 是否跳过视图(默认 false)
     */
    private boolean skipView;

    /**
     * 过滤表前缀
     * example: addTablePrefix("t_")
     * result: t_simple -> Simple
     */
    private final Set<String> tablePrefix = new HashSet<>();

    /**
     * 过滤表后缀
     * example: addTableSuffix("_0")
     * result: t_simple_0 -> Simple
     */
    private final Set<String> tableSuffix = new HashSet<>();

    /**
     * 过滤字段前缀
     * example: addFieldPrefix("is_")
     * result: is_deleted -> deleted
     */
    private final Set<String> fieldPrefix = new HashSet<>();

    /**
     * 过滤字段后缀
     * example: addFieldSuffix("_flag")
     * result: deleted_flag -> deleted
     */
    private final Set<String> fieldSuffix = new HashSet<>();

    /**
     * 需要包含的表名,允许正则表达式(与exclude二选一配置)<br/>
     * 当{@link #enableSqlFilter}为true时,正则表达式无效.
     */
    private final Set<String> include = new HashSet<>();

    /**
     * 需要排除的表名,允许正则表达式<br/>
     * 当{@link #enableSqlFilter}为true时,正则表达式无效.
     */
    private final Set<String> exclude = new HashSet<>();

    /**
     * 启用sql过滤,语法不能支持使用sql过滤表的话,可以考虑关闭此开关.
     *
     * @since 3.3.1
     */
    private boolean enableSqlFilter = true;

    /**
     * 启用 schema 默认 false
     */
    private boolean enableSchema;

    /**
     * 包含表名
     *
     * @since 3.3.0
     */
    private LikeTable likeTable;

    /**
     * 不包含表名
     *
     * @since 3.3.0
     */
    private LikeTable notLikeTable;

    private final Entity.Builder entityBuilder = new Entity.Builder(this);

    private final Controller.Builder controllerBuilder = new Controller.Builder(this);

    private final Mapper.Builder mapperBuilder = new Mapper.Builder(this);

    private final Service.Builder serviceBuilder = new Service.Builder(this);
5.模板配置
 FastAutoGenerator.create(config)
                //模板配置
                .templateConfig((scanner,builder)->{
                    //配置不需要生成的文件
//                  builder.disable(TemplateType.CONTROLLER,TemplateType.SERVICE,TemplateType.SERVICE_IMPL);
                })

可以配置各个实体类模板的位置,以及是否禁用模板,不生成文件等,更多功能查看源码TemplateConfig


    /**
     * 设置实体模板路径
     */
    private String entity;

    /**
     * 设置实体模板路径(kotlin模板)
     */
    private String entityKt;

    /**
     * 设置控制器模板路径
     */
    private String controller;

    /**
     * 设置Mapper模板路径
     */
    private String mapper;

    /**
     * 设置MapperXml模板路径
     */
    private String xml;

    /**
     * 设置Service模板路径
     */
    private String service;

    /**
     * 设置ServiceImpl模板路径
     */
    private String serviceImpl;

    /**
     * 是否禁用实体模板(默认 false)
     */
    private boolean disableEntity;
6.注入配置
 FastAutoGenerator.create(config)
                //注入配置
//                .injectionConfig((scanner,builder)  ->{})

可以配置自定义模板等,更多功能查看源码InjectionConfig

    /**
     * 输出文件之前消费者
     */
    private BiConsumer<TableInfo, Map<String, Object>> beforeOutputFileBiConsumer;

    /**
     * 自定义配置 Map 对象
     */
    private Map<String, Object> customMap = new HashMap<>();

    /**
     * 自定义模板文件,key为文件名称,value为模板路径(已弃用,换成了customFiles,3.5.4版本会删除此方法)
     */
    @Deprecated
    private Map<String, String> customFile = new HashMap<>();

    /**
     * 自定义模板文件列表
     *
     * @since 3.5.3
     */
    private List<CustomFile> customFiles = new ArrayList<>();

    /**
     * 是否覆盖已有文件(默认 false)(已弃用,已放到自定义文件类CustomFile中,3.5.4版本会删除此方法)
     *
     * @since 3.5.2
     */
    @Deprecated
    private boolean fileOverride;
7.模板引擎配置
 FastAutoGenerator.create(config)
                //模板引擎配置
//                .templateConfig(builder->{})

可以配置模板引擎,更多功能查看源码AbstractTemplateEngine

对你有帮助吗?点个赞把~

;