Mybatis-Plus新版代码生成器使用,SpringBoot3.0+JDK17 整合Mybatis-Plus,Mybatis-Plus生成器及模板新旧对比。


在公司开发的新项目,使用到的是SpringBoot3.0+JDK17 ,顺带也将mybatis-plus的版本给提升了,升级了后发现老的代码生成器没办法使用了哎。那就浅记录下叭。

参考官网:https://baomidou.com/pages/d357af

Mybatis-Plus代码生成器(新)

 <!--MyBaitsPlus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
        </dependency>

版本3.5.3.1
在官网都有详细的配置说明:
在这里插入图片描述

直接上代码:

package com.youming.client;

import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler;
import com.youming.client.commons.base.BaseController;
import com.youming.client.commons.base.BaseDomain;
import com.youming.client.commons.base.BaseServiceImpl;
import com.youming.client.commons.base.IBaseService;

public class MyBatisPlusGenerator {

    private static final String AUTHOR = "xii";

    private static final String USER_DIR = System.getProperty("user.dir");

    private static final String JDBC_URL = "jdbc:mysql://XXXXXXXXX";

    private static final String JDBC_PASSWORD = "123456";
    private static final String JDBC_USERNAME = "root";

    /**
     * 包配置 -父级目录
     */
    private static final String PACKAGE_PARENT = "com.XXXXXX";

    /**
     * 包配置--模块目录,
     */
    private static final String PACKAGE_MODULE_NAME = "alarm";


    /**
     * 包配置 - 实体类目录
     */
    private static final String PACKAGE_ENTITY = "domain";

    /**
     * 包配置 - 数据访问接口目录
     */
    private static final String PACKAGE_MAPPER = "mapper";

    /**
     * 包配置 - 业务处理接口目录
     */
    private static final String PACKAGE_SERVICE = "api";

    /**
     * 包配置 - 业务处理实现目录
     */
    private static final String PACKAGE_SERVICE_IMPL = "service";

    /**
     * 包配置 - 控制器目录
     */
    private static final String PACKAGE_CONTROLLER = "controller";

    /**
     * 要生成的表,用','分隔
     */
    private static final String TABLES = "alarm_record";

    /**
     * 通用包路径
     */
    private static final String PACKAGE_BASE = "com.youming.client.commons.base";

    /**
     * 全局配置
     *
     * @return {@link GlobalConfig}
     */
    private static GlobalConfig globalConfig() {
        GlobalConfig config = new GlobalConfig.Builder().author(AUTHOR).outputDir(USER_DIR + "/src/main/java").build();
        return config;
    }

    /**
     * 数据源配置
     */
    private static DataSourceConfig dataSourceConfig() {
        DataSourceConfig config = new DataSourceConfig.Builder(JDBC_URL,JDBC_USERNAME,JDBC_PASSWORD)
                .typeConvert(new MySqlTypeConvert())
                .keyWordsHandler(new MySqlKeyWordsHandler())
                .build();;
        return config;
    }

    /**
     * 包配置
     */
    private static PackageConfig packageConfig() {
        PackageConfig config = new PackageConfig.Builder()
                .parent(PACKAGE_PARENT)
                .moduleName(PACKAGE_MODULE_NAME)
                .entity(PACKAGE_ENTITY)
                .service(PACKAGE_SERVICE)
                .serviceImpl(PACKAGE_SERVICE_IMPL)
                .mapper(PACKAGE_MAPPER)
                .xml("mapper.xml")
                .controller(PACKAGE_CONTROLLER)
//                .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://"))
                .build();
        return config;
    }

    /**
     * 代码生成模板配置-freemarker
     */
    private static TemplateConfig templateConfig() {
        TemplateConfig config = new TemplateConfig.Builder()
                .disable(TemplateType.ENTITY)
                .entity("/templates/entity.java")
                .service("/templates/service.java")
                .serviceImpl("/templates/serviceImpl.java")
                .mapper("/templates/mapper.java")
                .xml("/templates/mapper.xml")
                .controller("/templates/controller.java")
                .build();
        return config;
    }

    /***
     * 代码生成策略配置
     * */
    private static StrategyConfig strategyConfig() {

        StrategyConfig config = new StrategyConfig.Builder()
                .enableCapitalMode()
                .enableSkipView()
                .disableSqlFilter()
//                .likeTable(new LikeTable("USER"))
                .addInclude(TABLES.split(","))
                .addTablePrefix(packageConfig().getModuleName() + "_")
                .controllerBuilder() //controller层
                .enableFileOverride()
                .enableRestStyle()
                .superClass(BaseController.class)
//                .enableHyphenStyle()
                .enableRestStyle()
                .entityBuilder()//实体类
                .superClass(BaseDomain.class)
                .enableLombok()
                .enableFileOverride()
                .serviceBuilder() //service层
                .enableFileOverride()
                .superServiceClass(IBaseService.class)  //模板中需要继承的类
                .superServiceImplClass(BaseServiceImpl.class)
                .build();
//                .addFieldSuffix("_flag")


        return config;
    }

    public static void main(String[] args) {
        AutoGenerator generator = new AutoGenerator(dataSourceConfig());
        generator.strategy(strategyConfig());
        generator.global(globalConfig());
        generator.packageInfo(packageConfig());
        generator.template(templateConfig());
        generator.execute();

    }
}

模板:
controller.java.ftl

package ${package.Controller};


import org.springframework.web.bind.annotation.RequestMapping;

<#if restControllerStyle>
    import org.springframework.web.bind.annotation.RestController;
<#else>
    import org.springframework.stereotype.Controller;
</#if>
<#if superControllerClassPackage??>
    import ${superControllerClassPackage};
</#if>
import ${package.Service}.${table.serviceName};
import ${package.Entity}.${entity};


/**
* <p>
    * ${table.comment!} 前端控制器
    * </p>
* @author ${author}
* @since ${date}
*/
<#if restControllerStyle>
    @RestController
<#else>
    @Controller
</#if>
@RequestMapping("<#if controllerMappingHyphenStyle??>${controllerMappingHyphen?replace("-","/")}<#else>${table.entityPath?replace("-","/")}</#if>")
<#if kotlin>
    class ${table.controllerName}<#if superControllerClass??> : ${superControllerClass}()</#if>
<#else>
    <#if superControllerClass??>
        public class ${table.controllerName} extends ${superControllerClass}<${entity},${table.serviceName}> {
    <#else>
        public class ${table.controllerName} {


    </#if>




    }
</#if>

entity.java.ftl

package ${package.Entity};

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

/**
* <p>
    * ${table.comment!}
    * </p>
* @author ${author}
* @since ${date}
*/
<#if entityLombokModel>
    @Data
    <#if superEntityClass??>
        @EqualsAndHashCode(callSuper = true)
    <#else>
        @EqualsAndHashCode(callSuper = false)
    </#if>
    @Accessors(chain = true)
</#if>
<#if table.convert>
    @TableName("${table.name}")
</#if>
<#if swagger2>
    @ApiModel(value="${entity}对象", description="${table.comment!}")
</#if>
<#if superEntityClass??>
    public class ${entity} extends ${superEntityClass}<#if activeRecord><${entity}></#if> {
<#elseif activeRecord>
    public class ${entity} extends Model<${entity}> {
<#else>
    public class ${entity} implements Serializable {
</#if>

<#if entitySerialVersionUID>
    private static final long serialVersionUID = 1L;
</#if>

<#--    @Builder-->
<#--    public ${entity}(Long id,<#list table.fields as field>${field.propertyType} ${field.propertyName}<#if field_has_next>,</#if></#list>){-->
<#--        super(id);-->
<#--        <#list table.fields as field>-->
<#--        this.${field.propertyName}=${field.propertyName};-->
<#--        </#list>-->
<#--    }-->
<#-- ----------  BEGIN 字段循环遍历  ---------->
<#list table.fields as field>
    <#if field.keyFlag>
        <#assign keyPropertyName="${field.propertyName}"/>
    </#if>

    <#if field.comment!?length gt 0>
        <#if swagger2>
            @ApiModelProperty(value = "${field.comment}")
        <#else>
            /**
            * ${field.comment}
            */
        </#if>
    </#if>
    <#if field.keyFlag>
    <#-- 主键 -->
        <#if field.keyIdentityFlag>
            @TableId(value = "${field.name}", type = IdType.AUTO)
        <#elseif idType??>
            @TableId(value = "${field.name}", type = IdType.${idType})
        <#elseif field.convert>
            @TableId("${field.name}")
        </#if>
    <#-- 普通字段 -->
    <#elseif field.fill??>
    <#-- -----   存在字段填充设置   ----->
        <#if field.convert>
            @TableField(value = "${field.name}", fill = FieldFill.${field.fill})
        <#else>
            @TableField(fill = FieldFill.${field.fill})
        </#if>
    <#elseif field.convert>
        @TableField("${field.name}")
    </#if>
<#-- 乐观锁注解 -->
    <#if (versionFieldName!"") == field.name>
        @Version
    </#if>
<#-- 逻辑删除注解 -->
    <#if (logicDeleteFieldName!"") == field.name>
        @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 entityBuilderModel>
            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 entityBuilderModel>
            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
    protected 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>
}

mapper.java.ftl

package ${package.Mapper};

import ${package.Entity}.${entity};
import ${superMapperClassPackage};

/**
* <p>
* ${table.comment!}Mapper接口
* </p>
* @author ${author}
* @since ${date}
*/
<#if kotlin>
    interface ${table.mapperName} : ${superMapperClass}<${entity}>
<#else>
    public interface ${table.mapperName} extends ${superMapperClass}<${entity}> {

    }
</#if>

mapper.xml.ftl

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="${package.Mapper}.${table.mapperName}">

    <#if enableCache>
        <!-- 开启二级缓存 -->
        <cache type="org.mybatis.caches.ehcache.LoggingEhcache"/>

    </#if>
    <#if baseResultMap>
        <!-- 通用查询映射结果 -->
        <resultMap id="BaseResultMap" type="${package.Entity}.${entity}">
            <#list table.fields as field>
                <#if field.keyFlag>
                    <#--生成主键排在第一位-->
                    <id column="${field.name}" property="${field.propertyName}" />
                </#if>
            </#list>
            <#list table.commonFields as field>
            <#--生成公共字段 -->
                <result column="${field.name}" property="${field.propertyName}" />
            </#list>
            <#list table.fields as field>
                <#if !field.keyFlag>
                <#--生成普通字段 -->
                    <result column="${field.name}" property="${field.propertyName}" />
                </#if>
            </#list>
        </resultMap>

    </#if>
    <#if baseColumnList>
        <!-- 通用查询结果列 -->
        <sql id="Base_Column_List">
            <#list table.commonFields as field>
                ${field.name},
            </#list>
            ${table.fieldNames}
        </sql>

    </#if>
</mapper>

service.java.ftl

package ${package.Service};

import ${package.Entity}.${entity};
import ${superServiceClassPackage};
import com.baomidou.mybatisplus.core.metadata.IPage;
/**
* <p>
    * ${table.comment!} 服务类
    * </p>
* @author ${author}
* @since ${date}
*/
<#if kotlin>
    interface ${table.serviceName} : ${superServiceClass}<${entity}>
<#else>
    public interface ${table.serviceName} extends ${superServiceClass}<${entity}> {

    }
</#if>

serviceImpl.java.ftl

package ${package.ServiceImpl};

import ${package.Entity}.${entity};
import ${package.Mapper}.${table.mapperName};
import ${package.Service}.${table.serviceName};
import ${superServiceImplClassPackage};
import org.springframework.stereotype.Service;


/**
* <p>
    * ${table.comment!} 服务实现类
    * </p>
* @author ${author}
* @since ${date}
*/
@Service
<#if kotlin>
    open class ${table.serviceImplName} : ${superServiceImplClass}<${table.mapperName}, ${entity}>(), ${table.serviceName} {

    }
<#else>
    public class ${table.serviceImplName} extends ${superServiceImplClass}<${table.mapperName}, ${entity}> implements ${table.serviceName} {


    }
</#if>

运行main方法

在这里插入图片描述

这样就生成了

Mybatis-Plus代码生成器(旧)

 <!--MyBaitsPlus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
			<version>3.4.1</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.31</version>
        </dependency>

在这里插入图片描述

整理过后的工具类:

package com.youming.shuiku;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.FileOutConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.TemplateConfig;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.ArrayList;
import java.util.List;

public class MyBatisPlusGenerator {

    private static final String AUTHOR = "xxx";//作者

    private static final String USER_DIR = System.getProperty("user.dir");

    private static final String JDBC_URL = "jdbc:mysql://------------------------";//数据库路径

    private static final String JDBC_DRIVER_NAME = "com.mysql.cj.jdbc.Driver";

    private static final String JDBC_PASSWORD = "123456";
    private static final String JDBC_USERNAME = "root";

    /**
     * 包配置 -父级目录
     */
    private static final String PACKAGE_PARENT = "com.XX.XX";

    /**
     * 包配置--模块目录,
     */
    private static final String PACKAGE_MODULE_NAME = "XX";


    /**
     * 包配置 - 实体类目录
     */
    private static final String PACKAGE_ENTITY = "XX.domain";

    /**
     * 包配置 - 数据访问接口目录
     */
    private static final String PACKAGE_MAPPER = "XX.mapper";

    /**
     * 包配置 - 业务处理接口目录
     */
    private static final String PACKAGE_SERVICE = "XX.api";

    /**
     * 包配置 - 业务处理实现目录
     */
    private static final String PACKAGE_SERVICE_IMPL = "XX.service";

    /**
     * 包配置 - 控制器目录
     */
    private static final String PACKAGE_CONTROLLER = "XX.controller";

    /**
     * 要生成的表,用','分隔
     */
    private static final String TABLES = "app_upload";//表名

    /**
     * 通用包路径   用于模板中类的导包
     */
    private static final String PACKAGE_BASE = "com.youming.shuiku.commons.base";

    /**
     * 全局配置
     *
     * @return {@link GlobalConfig}
     */
    private static GlobalConfig globalConfig() {
        GlobalConfig config = new GlobalConfig();
        config.setOutputDir(USER_DIR + "/src/main/java");
        config.setAuthor(AUTHOR);
        config.setOpen(false);
        return config;
    }

    /**
     * 数据源配置
     */
    private static DataSourceConfig dataSourceConfig() {
        DataSourceConfig config = new DataSourceConfig();
        config.setUrl(JDBC_URL);
        config.setDriverName(JDBC_DRIVER_NAME);
        config.setUsername(JDBC_USERNAME);
        config.setPassword(JDBC_PASSWORD);
        return config;
    }

    /**
     * 包配置
     */
    private static PackageConfig packageConfig() {
        PackageConfig config = new PackageConfig();
        config.setParent(PACKAGE_PARENT);
        config.setModuleName(PACKAGE_MODULE_NAME);

        config.setEntity(PACKAGE_ENTITY);
        config.setMapper(PACKAGE_MAPPER);
        config.setService(PACKAGE_SERVICE);
        config.setServiceImpl(PACKAGE_SERVICE_IMPL);
        config.setController(PACKAGE_CONTROLLER);
        return config;
    }

    /**
     * 代码生成模板配置-freemarker
     */
    private static TemplateConfig templateConfig() {
        TemplateConfig config = new TemplateConfig();
        config.setEntity("templates/entity.java");
        config.setMapper("templates/mapper.java");
        config.setService("templates/service.java");
        config.setServiceImpl("templates/serviceImpl.java");
        config.setController("templates/controller.java");
        config.setXml(null);
        return config;
    }

    /***
     * 代码生成策略配置
     * */
    private static StrategyConfig strategyConfig() {
        //策列配置,数据库表配置
        StrategyConfig config = new StrategyConfig();
        // 数据库表映射到实体类的命名策略
        config.setNaming(NamingStrategy.underline_to_camel);
        // 数据库表字段映射到实体类的命名策略
        config.setColumnNaming(NamingStrategy.underline_to_camel);
        // 实体是否为lombok
        config.setEntityLombokModel(true);
        config.setInclude(TABLES.split(","));
        // 驼峰转
        config.setControllerMappingHyphenStyle(true);

        // TEST 风格
        config.setRestControllerStyle(true);
        // 表前缀
      //  config.setTablePrefix(packageConfig().getModuleName() + "_");


        // 字段填充
        List<TableFill> tableFills = new ArrayList<>();
        tableFills.add(new TableFill("create_time", FieldFill.INSERT));
        tableFills.add(new TableFill("update_time", FieldFill.INSERT_UPDATE));
        tableFills.add(new TableFill("is_deleted", FieldFill.INSERT));
        config.setTableFillList(tableFills);


        // commonBase
        config.setSuperEntityColumns("id","create_time","update_time");
        config.setSuperEntityClass(PACKAGE_BASE.concat(".BaseDomain"));
        config.setSuperServiceClass(PACKAGE_BASE.concat(".IBaseService"));
        config.setSuperServiceImplClass(PACKAGE_BASE.concat(".BaseServiceImpl"));
        config.setSuperControllerClass(PACKAGE_BASE.concat(".BaseController"));


        return config;
    }

    /**
     * 自定义配置
     */
    private static InjectionConfig injectionConfig() {
        InjectionConfig config = new InjectionConfig() {
            @Override
            public void initMap() {

            }
        };

        // 自定义输出 mapper.xml到resources 目录下
        String mapperPath = "/templates/mapper.xml.ftl";
        List<FileOutConfig> outConfigList = new ArrayList<>();
        outConfigList.add(new FileOutConfig(mapperPath) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定义输出文件名,如果你Entity 设置了前后缀,此处的xml名称会跟随发生变化
                return USER_DIR + "/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });
        config.setFileOutConfigList(outConfigList);
        return config;
    }

    public static void main(String[] args) {
        AutoGenerator generator = new AutoGenerator();
        generator.setGlobalConfig(globalConfig());
        generator.setDataSource(dataSourceConfig());
        generator.setPackageInfo(packageConfig());
        generator.setTemplate(templateConfig());
        generator.setTemplateEngine(new FreemarkerTemplateEngine());
        generator.setCfg(injectionConfig());
        generator.setStrategy(strategyConfig());
        generator.execute();

    }
}

模板:
可以根据需要修改,我这里使用了微服务
controller.java.ftl

package ${package.Controller};


import org.springframework.web.bind.annotation.RequestMapping;

<#if restControllerStyle>
    import org.springframework.web.bind.annotation.RestController;
<#else>
    import org.springframework.stereotype.Controller;
</#if>
<#if superControllerClassPackage??>
    import ${superControllerClassPackage};
</#if>
import ${package.Service}.${table.serviceName};
import ${package.Entity}.${entity};
import org.apache.dubbo.config.annotation.DubboReference;

/**
* <p>
* ${table.comment!} 前端控制器
* </p>
* @author ${author}
* @since ${date}
*/
<#if restControllerStyle>
    @RestController
<#else>
    @Controller
</#if>
@RequestMapping("<#if controllerMappingHyphenStyle??>${controllerMappingHyphen?replace("-","/")}<#else>${table.entityPath?replace("-","/")}</#if>")
<#if kotlin>
    class ${table.controllerName}<#if superControllerClass??> : ${superControllerClass}()</#if>
<#else>
    <#if superControllerClass??>
        public class ${table.controllerName} extends ${superControllerClass}<${entity},${table.serviceName}> {
    <#else>
        public class ${table.controllerName} {


        </#if>
    @DubboReference(version = "1.0.0")
    ${table.serviceName}  ${table.serviceName?substring(1,table.serviceName?length?number)?uncap_first};

    @Override
    public ${table.serviceName} getService() {
    return ${table.serviceName?substring(1,table.serviceName?length?number)?uncap_first};

    }

    }
</#if>

entity.java.ftl

package ${package.Entity};

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

/**
* <p>
    * ${table.comment!}
    * </p>
* @author ${author}
* @since ${date}
*/
<#if entityLombokModel>
    @Data
    <#if superEntityClass??>
        @EqualsAndHashCode(callSuper = true)
    <#else>
        @EqualsAndHashCode(callSuper = false)
    </#if>
    @Accessors(chain = true)
</#if>
<#if table.convert>
    @TableName("${table.name}")
</#if>
<#if swagger2>
    @ApiModel(value="${entity}对象", description="${table.comment!}")
</#if>
<#if superEntityClass??>
    public class ${entity} extends ${superEntityClass}<#if activeRecord><${entity}></#if> {
<#elseif activeRecord>
    public class ${entity} extends Model<${entity}> {
<#else>
    public class ${entity} implements Serializable {
</#if>

<#if entitySerialVersionUID>
    private static final long serialVersionUID = 1L;
</#if>

<#--    @Builder-->
<#--    public ${entity}(Long id,<#list table.fields as field>${field.propertyType} ${field.propertyName}<#if field_has_next>,</#if></#list>){-->
<#--        super(id);-->
<#--        <#list table.fields as field>-->
<#--        this.${field.propertyName}=${field.propertyName};-->
<#--        </#list>-->
<#--    }-->
<#-- ----------  BEGIN 字段循环遍历  ---------->
<#list table.fields as field>
    <#if field.keyFlag>
        <#assign keyPropertyName="${field.propertyName}"/>
    </#if>

    <#if field.comment!?length gt 0>
        <#if swagger2>
            @ApiModelProperty(value = "${field.comment}")
        <#else>
            /**
            * ${field.comment}
            */
        </#if>
    </#if>
    <#if field.keyFlag>
    <#-- 主键 -->
        <#if field.keyIdentityFlag>
            @TableId(value = "${field.name}", type = IdType.AUTO)
        <#elseif idType??>
            @TableId(value = "${field.name}", type = IdType.${idType})
        <#elseif field.convert>
            @TableId("${field.name}")
        </#if>
    <#-- 普通字段 -->
    <#elseif field.fill??>
    <#-- -----   存在字段填充设置   ----->
        <#if field.convert>
            @TableField(value = "${field.name}", fill = FieldFill.${field.fill})
        <#else>
            @TableField(fill = FieldFill.${field.fill})
        </#if>
    <#elseif field.convert>
        @TableField("${field.name}")
    </#if>
<#-- 乐观锁注解 -->
    <#if (versionFieldName!"") == field.name>
        @Version
    </#if>
<#-- 逻辑删除注解 -->
    <#if (logicDeleteFieldName!"") == field.name>
        @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 entityBuilderModel>
            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 entityBuilderModel>
            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
    protected 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>
}

mapper.java.ftl

package ${package.Mapper};

import ${package.Entity}.${entity};
import ${superMapperClassPackage};

/**
* <p>
* ${table.comment!}Mapper接口
* </p>
* @author ${author}
* @since ${date}
*/
<#if kotlin>
    interface ${table.mapperName} : ${superMapperClass}<${entity}>
<#else>
    public interface ${table.mapperName} extends ${superMapperClass}<${entity}> {

    }
</#if>

mapper.xml.ftl

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="${package.Mapper}.${table.mapperName}">

    <#if enableCache>
        <!-- 开启二级缓存 -->
        <cache type="org.mybatis.caches.ehcache.LoggingEhcache"/>

    </#if>
    <#if baseResultMap>
        <!-- 通用查询映射结果 -->
        <resultMap id="BaseResultMap" type="${package.Entity}.${entity}">
            <#list table.fields as field>
                <#if field.keyFlag>
                    <#--生成主键排在第一位-->
                    <id column="${field.name}" property="${field.propertyName}" />
                </#if>
            </#list>
            <#list table.commonFields as field>
            <#--生成公共字段 -->
                <result column="${field.name}" property="${field.propertyName}" />
            </#list>
            <#list table.fields as field>
                <#if !field.keyFlag>
                <#--生成普通字段 -->
                    <result column="${field.name}" property="${field.propertyName}" />
                </#if>
            </#list>
        </resultMap>

    </#if>
    <#if baseColumnList>
        <!-- 通用查询结果列 -->
        <sql id="Base_Column_List">
            <#list table.commonFields as field>
                ${field.name},
            </#list>
            ${table.fieldNames}
        </sql>

    </#if>
</mapper>

service.java.ftl

package ${package.Service};

import ${package.Entity}.${entity};
import ${superServiceClassPackage};
import com.baomidou.mybatisplus.core.metadata.IPage;
/**
* <p>
    * ${table.comment!} 服务类
    * </p>
* @author ${author}
* @since ${date}
*/
<#if kotlin>
    interface ${table.serviceName} : ${superServiceClass}<${entity}>
<#else>
    public interface ${table.serviceName} extends ${superServiceClass}<${entity}> {

    }
</#if>

serviceImpl.java.ftl

package ${package.ServiceImpl};

import ${package.Entity}.${entity};
import ${package.Mapper}.${table.mapperName};
import ${package.Service}.${table.serviceName};
import ${superServiceImplClassPackage};
import org.apache.dubbo.config.annotation.DubboService;


/**
* <p>
    * ${table.comment!} 服务实现类
    * </p>
* @author ${author}
* @since ${date}
*/
<#--@Service-->
@DubboService(version = "1.0.0")
<#if kotlin>
    open class ${table.serviceImplName} : ${superServiceImplClass}<${table.mapperName}, ${entity}>(), ${table.serviceName} {

    }
<#else>
    public class ${table.serviceImplName} extends ${superServiceImplClass}<${table.mapperName}, ${entity}> implements ${table.serviceName} {


    }
</#if>

运行工具类中的方法。就可以

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当然可以,以下是 SpringBoot 3、Mybatis-Plus 3.5.2和 Spring Security 的配置文件和代码生成器: 1. pom.xml ``` <properties> <java.version>17</java.version> <mybatis-plus.version>3.5.2</mybatis-plus.version> <spring-boot-starter-parent.version>2.6.0</spring-boot-starter-parent.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>${mybatis-plus.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> </dependencies> ``` 2. application.properties ``` # 数据源配置 spring.datasource.url=jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC spring.datasource.username=your_username spring.datasource.password=your_password spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # Mybatis-Plus 配置 mybatis-plus.configuration.cache-enabled=true mybatis-plus.configuration.cache-redis=true mybatis-plus.mapper-locations=classpath:mapper/**.xml # Spring Security 配置 spring.security.user.name=admin spring.security.user.password=admin spring.security.user.roles=ADMIN # Mybatis-Plus 代码生成器配置 # 数据源配置 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8 spring.datasource.username=your_username spring.datasource.password=your_password # 全局配置 mybatis-plus.global-config.id-type=auto mybatis-plus.global-config.db-column-underline=true mybatis-plus.global-config.refresh-mapper=true # 策略配置 mybatis-plus.strategy.include=table_name # 包配置 mybatis-plus.package.config.parent=com.example.demo mybatis-plus.package.config.module=your_module_name # 配置模板 mybatis-plus.template.config.xml=templates/mapper.xml.vm mybatis-plus.template.config.controller=templates/controller.java.vm mybatis-plus.template.config.service=templates/service.java.vm mybatis-plus.template.config.serviceImpl=templates/serviceImpl.java.vm mybatis-plus.template.config.entity=templates/entity.java.vm ``` 3. 代码生成器 ``` public class CodeGenerator { public static void main(String[] args) throws IOException { AutoGenerator generator = new AutoGenerator(); generator.setGlobalConfig(getGlobalConfig()); generator.setDataSource(getDataSourceConfig()); generator.setPackageInfo(getPackageConfig()); generator.setTemplate(getTemplateConfig()); generator.setStrategy(getStrategyConfig()); generator.execute(); } private static GlobalConfig getGlobalConfig() { GlobalConfig config = new GlobalConfig(); config.setOutputDir(System.getProperty("user.dir") + "/src/main/java"); config.setAuthor("your_author_name"); config.setOpen(false); return config; } private static DataSourceConfig getDataSourceConfig() { DataSourceConfig config = new DataSourceConfig(); config.setDbType(DbType.MYSQL); config.setUrl("jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8"); config.setUsername("your_username"); config.setPassword("your_password"); config.setDriverName("com.mysql.cj.jdbc.Driver"); return config; } private static PackageConfig getPackageConfig() { PackageConfig config = new PackageConfig(); config.setParent("com.example.demo"); config.setModuleName("your_module_name"); return config; } private static TemplateConfig getTemplateConfig() { TemplateConfig config = new TemplateConfig(); config.setXml(null); return config; } private static StrategyConfig getStrategyConfig() { StrategyConfig config = new StrategyConfig(); config.setNaming(NamingStrategy.underline_to_camel); config.setColumnNaming(NamingStrategy.underline_to_camel); config.setEntityLombokModel(true); config.setRestControllerStyle(true); config.setInclude("table_name"); config.setControllerMappingHyphenStyle(true); config.setTablePrefix("tb_"); return config; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杵意

谢谢金主打赏呀!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值