mybatis-plus-generator

Table of Contents

目的

使用Mybatis-generator生成controller,service,serviceImpl,entity.etc,相当于备忘录

依赖引入

<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.3.1</version>
        </dependency>

模板代码

自行配置url,port,name,pwd,db_name,service_name,parent_pack.etc属性,所有代码已解释

package com.los.codegen.gen;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;

import java.util.Arrays;


/**
 * @author paul 2024/1/31
 */

public class coreGen {
    private static final String SERVICE_NAME = "${service_name}";

    //dataSource config
    private static final String DATA_SOURCE_USER_NAME  = "${name}l";
    private static final String DATA_SOURCE_PASSWORD  = "${pwd}";
    //package config
    private static final String PARENT_PACK_NAME = "${parent_apck}";
    private static final String XML_PACK_NAME = "mapper";
    private static final String SERVICE_IMPL_PACK_NAME = "service.impl";
    private static final String ENTITY_PACK_NAME = "entity";
    private static final String DATA_SOURCE_URL = "jdbc:mysql://${url}:${port}/l${db_name}";
    private static final String[] TABLE_NAMES = new String[]{
       "t_isv_info",
       "t_mch_app",
       "t_mch_division_receiver",
    	"..."
		//自行配置表名
    };
    public static void main(String[] args) {
        /* 配置数据源 **/
        FastAutoGenerator.create(new DataSourceConfig.Builder(DATA_SOURCE_URL, DATA_SOURCE_USER_NAME, DATA_SOURCE_PASSWORD))
                .globalConfig(builder -> {
                            /* 自定义作者 **/
                    builder.author("paul")
                            /* 开启springdoc,配置springdoc输出,原因是knife4j底层基于springdoc**/
                            .enableSpringdoc()
                            /* 开启swagger,不能同时与springdoc开启,swagger优先级低于springdoc**/
                            /*.enableSwagger() **/
                            /* 关闭路径打开,默认开启,效果是本地打开文件夹 **/
                            .disableOpenDir()
                            /* 指定输出目录 **/
                            .outputDir("F:\\los\\los-codegen\\src\\main\\java");
                })
                /* 包路径配置 ,也就是主目录下各个模块生成的文件名 **/
                .packageConfig(builder -> {
                    /* 父包名 **/
                    builder.parent(PARENT_PACK_NAME)
                            /* xml 文件路径 **/
                            .xml(XML_PACK_NAME)
                            /* 模块名,实际路径是PARENT_PACK_NAME+SERVICE_NAME **/
                            .moduleName(SERVICE_NAME)
                            /* serviceImpl 文件路径 **/
                            .serviceImpl(SERVICE_IMPL_PACK_NAME)
                            /* entity 文件路径 **/
                            .entity(ENTITY_PACK_NAME);
                })
                .strategyConfig(builder -> {
                    /* 设置需要生成的表名 **/
                    builder.addInclude(TABLE_NAMES)
                            /*  设置过滤表前缀 **/
                            .addTablePrefix("t_", "c_") //
                            /* entity builder **/
                            .entityBuilder()
                            /* 数据库表映射到实体的命名策略-->下划线转驼峰 **/
                            .naming(NamingStrategy.underline_to_camel)
                            /* 数据库表字段映射到实体的命名策略-->下划线转驼峰 **/
                            .columnNaming(NamingStrategy.underline_to_camel)
                            /* 覆盖已有文件 **/
                            .enableFileOverride()
                            /* 开启lombok  **/
                            .enableLombok()
                            /* tableField 填充 **/
                            .addTableFills(Arrays.asList(
                                    /* 自定义字段填充策略 **/
                                    new Column("created_at", FieldFill.INSERT),
                                    new Column("updated_at", FieldFill.UPDATE)
                            ))
                         	/*  controller builder **/
                            .controllerBuilder()
                            /* 开启restful **/
                            .enableRestStyle()
                            /* 开启驼峰转连字符 **/
                            .enableHyphenStyle()
                           	/* service builder **/
                            .serviceBuilder()
                            /* 覆盖已有文件 **/
                            .enableFileOverride()
                            /* 自定义service命名策略 **/
                            .formatServiceFileName("%sService")
                            /* 自定义serviceImpl命名策略 **/
                            .formatServiceImplFileName("%sServiceImpl")
                           /* mapper builder **/
                            .mapperBuilder()
                            /* 启用基础列列表,意味着在生成SQL查询时包括所有列的基础信息 **/
                            .enableBaseColumnList()
                            /* 启用基础结果映射,即自动为查询结果创建默认的映射关系,将数据库表的字段映射到对象的属性上 **/
                            .enableBaseResultMap()
                            .build();
                })
                /* 使用Freemarker引擎模板,默认的是Velocity引擎模板 **/
                .templateEngine(new FreemarkerTemplateEngine())
                /* 执行 **/
                .execute();
    }
}

注意

  1. springboot3.0以上版本,使用knife4j时开启springdoc,若出现无法生成代码的bug,可能的情况是版本错误和freemarker模板有误.
  2. 直接从maven中复制的模板,会出现空格问题,freemarker的语法是保留空格的,所以需要源文件删除空格
  3. mybatis.generator不同版本的freemarker模板之间存在差异,比如对spring.doc的支持,请使用相同版本的模板
  4. 模板路径为resource/template
  5. 推荐文件输出路径与实际开发项目独立,防止误操作导致损失