MyBatis-Plus代码生成controller,entity,mapper,service层

        最近在处理业务的时候,有太多的表需要生成entity,controller等业务与处理模块了,之前一直使用idea连接数据库,再安装插件,即可生成相应的模块,今天换一种方式来实现。话不多说直接上代码 

一、添加依赖  

        全新的代码生成器添加于 3.5.1 版本,且对历史版本不兼容!如果使用的是 3.5.1 以下的版本,请参考 代码生成器 进行配置与使用。

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.7</version>
</dependency>
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.2</version>
</dependency>

二、配置设置

        这里实体类因需要添加注解,所以编写了自定义的模版myentity.java.ftl

@Slf4j
public class MyBatisPlusGenerator {

    public static void main(String[] args) {
    List<String> tables = new ArrayList<>();
    tables.add("org_info");
    
    FastAutoGenerator.create(
            "数据库连接路径", 
            "用户", 
            "密码"
        )
        .globalConfig(builder -> {
            builder.author("QT") // 设置作者名称
                   .outputDir(System.getProperty("user.dir") + "\\SayAo\\src\\main\\java") // 设置生成文件的输出路径
                   .enableSwagger() // 启用 Swagger 注解
                   .commentDate("yyyy-MM-dd") // 设置注释日期格式
                   .fileOverride(); // 启用文件覆盖
        })
        .packageConfig(builder -> {
            builder.parent("com.ali") // 设置父包名
                   .moduleName("sayao") // 设置模块名
                   .entity("model") // 设置实体类包名
                   .service("service") // 设置 Service 包名
                   .serviceImpl("service.impl") // 设置 Service 实现类包名
                   .controller("controller") // 设置 Controller 包名
                   .mapper("mapper") // 设置 Mapper 接口包名
                   .xml("mapper") // 设置 Mapper XML 文件包名
                   .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "\\SayAo\\src\\main\\resources\\mapper")); // 设置 Mapper XML 文件的输出路径
        })
        .strategyConfig(builder -> {
            builder.addInclude(tables) // 指定需要生成代码的表
                   .serviceBuilder()
                   .formatServiceFileName("%sService") // 设置 Service 接口文件名格式
                   .formatServiceImplFileName("%sServiceImpl") // 设置 Service 实现类文件名格式
                   .entityBuilder()
                   .enableLombok() // 启用 Lombok 注解
                   .enableTableFieldAnnotation() // 启用实体类字段注解
                   .controllerBuilder()
                   .enableHyphenStyle() // 启用连字符格式的映射路径
                   .formatFileName("%sController") // 设置 Controller 文件名格式
                   .enableRestStyle() // 启用 Rest 风格
                   .mapperBuilder()
                   .enableBaseResultMap() // 启用通用的 resultMap
                   .superClass(BaseMapper.class) // 设置 Mapper 的父类
                   .formatMapperFileName("%sMapper") // 设置 Mapper 文件名格式
                   .enableMapperAnnotation() // 启用 Mapper 注解
                   .formatXmlFileName("%sMapper"); // 设置 Mapper XML 文件名格式
        })
        .templateConfig(builder -> builder.entity("templates/myentity.java")) // 使用自定义的实体类模板
        .templateEngine(new FreemarkerTemplateEngine()) // 使用 Freemarker 引擎模板
        .execute();
}
}

三、ftl模版

        这段代码是一个用于生成 Java 实体类的 FreeMarker 模板,它根据指定的配置和数据库表结构动态生成实体类的代码。(按自己需求进行修改,这里主要是需要添加swagger与mybatisplus提供的注解)

package ${package.Entity};

<#list table.importPackages as pkg>
import ${pkg};
</#list>
<#if entityLombokModel>
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
<#if chainModel>
import lombok.experimental.Accessors;
</#if>
</#if>

/**
* @author ${author}
* @since ${date}
*/
<#if entityLombokModel>
@Data
<#if chainModel>
@Accessors(chain = true)
</#if>
</#if>
<#if table.convert>
@TableName("${schemaName}${table.name}")
</#if>
<#if superEntityClass??>
public class ${entity} extends ${superEntityClass}<#if activeRecord><${entity}></#if> {
<#elseif activeRecord>
public class ${entity} extends Model<${entity}> {
<#elseif entitySerialVersionUID>
public class ${entity} implements Serializable {
<#else>
public class ${entity} {
</#if>
<#if entitySerialVersionUID>

    private static final long serialVersionUID = 1L;
</#if>
<#-- ----------  BEGIN 字段循环遍历  ---------->
<#list table.fields as field>
    <#if field.keyFlag>
        <#assign keyPropertyName="${field.propertyName}"/>
    </#if>

    <#if field.comment!?length gt 0>
        <#if swagger>
        @ApiModelProperty("${field.comment}")
        <#else>
            /**
            * ${field.comment}
            */
        </#if>
    </#if>
    <#if field.keyFlag>
    <#-- 主键 -->
    <#if field.keyIdentityFlag>
    @TableId(value = "${field.annotationColumnName}", type = IdType.AUTO)
    <#elseif idType??>
    @TableId(value = "${field.annotationColumnName}", type = IdType.${idType})
    <#elseif field.convert>
    @TableId("${field.annotationColumnName}")
    </#if>
    <#-- 普通字段 -->
    <#elseif field.fill??>
    <#-- -----   存在字段填充设置   ----->
    <#if field.convert>
    @TableField(value = "${field.annotationColumnName}", fill = FieldFill.${field.fill})
    <#else>
    @TableField(fill = FieldFill.${field.fill})
    </#if>
    <#elseif field.convert>
    @TableField("${field.annotationColumnName}")
    </#if>
<#-- 乐观锁注解 -->
    <#if field.versionField>
    @Version
    </#if>
<#-- 逻辑删除注解 -->
    <#if field.logicDeleteField>
    @TableLogic
    </#if>
    private ${field.propertyType} ${field.propertyName};
</#list>
<#------------  END 字段循环遍历  ---------->

<#if !entityLombokModel>
    <#list table.fields as field>
        <#if field.propertyType == "boolean">
            <#assign getprefix="is"/>
        <#else>
            <#assign getprefix="get"/>
        </#if>
        public ${field.propertyType} ${getprefix}${field.capitalName}() {
        return ${field.propertyName};
        }

        <#if chainModel>
            public ${entity} set${field.capitalName}(${field.propertyType} ${field.propertyName}) {
        <#else>
            public void set${field.capitalName}(${field.propertyType} ${field.propertyName}) {
        </#if>
        this.${field.propertyName} = ${field.propertyName};
        <#if chainModel>
            return this;
        </#if>
        }
    </#list>
</#if>

<#if entityColumnConstant>
    <#list table.fields as field>
    public static final String ${field.name?upper_case} = "${field.name}";

    </#list>
</#if>
<#if activeRecord>
    @Override
    public Serializable pkVal() {
    <#if keyPropertyName??>
        return this.${keyPropertyName};
    <#else>
        return null;
    </#if>
    }

</#if>
<#if !entityLombokModel>
    @Override
    public String toString() {
    return "${entity}{" +
    <#list table.fields as field>
        <#if field_index==0>
            "${field.propertyName}=" + ${field.propertyName} +
        <#else>
            ", ${field.propertyName}=" + ${field.propertyName} +
        </#if>
    </#list>
    "}";
    }
</#if>
}




主打一个爱分享,结束~~~~~~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值