• 【MybatisPlus】制作逆向工具


    官方文档可参考:

    https://baomidou.com/pages/779a6e/#快速入门
    

      

    工具需要的依赖

    <?xml version="1.0"?>
    <project
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    	xmlns="http://maven.apache.org/POM/4.0.0"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    	<modelVersion>4.0.0</modelVersion>
    
    	<parent>
    		<groupId>cn.ymcd</groupId>
    		<artifactId>comm-sample</artifactId>
    		<version>1.0.0</version>
    	</parent>
    
    	<artifactId>comm-sample-mp-generator</artifactId>
    	<name>comm-sample-mp-generator</name>
    	<url>http://maven.apache.org</url>
    	<properties>
    		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    	</properties>
    
    	<dependencies>
    		<dependency>
    			<groupId>com.baomidou</groupId>
    			<artifactId>mybatis-plus-generator</artifactId>
    			<version>3.1.1</version>
    		</dependency>
    		<dependency>
    			<groupId>org.apache.velocity</groupId>
    			<artifactId>velocity-engine-core</artifactId>
    			<version>2.1</version>
    		</dependency>
    		<dependency>
    			<groupId>org.freemarker</groupId>
    			<artifactId>freemarker</artifactId>
    			<version>2.3.28</version>
    		</dependency>
    		<dependency>
    			<groupId>com.oracle</groupId>
    			<artifactId>ojdbc6</artifactId>
    			<version>11.1.0.7.0</version>
    		</dependency>
    		<dependency>
    			<groupId>mysql</groupId>
    			<artifactId>mysql-connector-java</artifactId>
    			<version>5.1.34</version>
    		</dependency>
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>3.8.1</version>
    			<scope>test</scope>
    		</dependency>
    
    		<dependency>
    			<groupId>org.ini4j</groupId>
    			<artifactId>ini4j</artifactId>
    			<version>0.5.4</version>
    		</dependency>
    	</dependencies>
    
    
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-compiler-plugin</artifactId>
    				<version>2.0.2</version>
    				<configuration>
    					<source>1.8</source>
    					<target>1.8</target>
    				</configuration>
    			</plugin>
    
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-shade-plugin</artifactId>
    				<version>3.2.0</version>
    				<executions>
    					<execution>
    						<phase>package</phase>
    						<goals>
    							<goal>shade</goal>
    						</goals>
    						<configuration>
    							<transformers>
    								<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
    									<!-- 主类的位置,例如上图文件,主类配置应为: -->
    									<!-- <mainClass>top.nihilwater.App</mainClass> -->
    									<mainClass>cn.ymcd.comm.sample.mp.generator.MainApplication</mainClass>
    								</transformer>
    							</transformers>
    						</configuration>
    					</execution>
    				</executions>
    			</plugin>
    		</plugins>
    	</build>
    
    </project>
    

    代码部分

    代码部分只有一个主类:

    package cn.ymcd.comm.sample.mp.generator;
    
    import com.baomidou.mybatisplus.annotation.DbType;
    import com.baomidou.mybatisplus.annotation.IdType;
    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.*;
    import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
    import com.baomidou.mybatisplus.generator.config.po.TableInfo;
    import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery;
    import com.baomidou.mybatisplus.generator.config.rules.DateType;
    import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
    import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
    import org.ini4j.Profile;
    import org.ini4j.Wini;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @projectName: comm-sample-mp-generator - 副本
     * @author: Cloud9
     * @date: 2022年05月31日 13:48
     * @version: 1.0
     */
    public class MainApplication {
    
        private static Wini windowsConfigIniFile;
    
        private final static String STATUS_TRUE = "true";
        private final static String STATUS_FALSE = "false";
    
        private static String commonPath = null;
    
        private static GlobalConfig globalConfig;
        private static DataSourceConfig dataSourceConfig;
        private static PackageConfig packageConfig;
        private static TemplateConfig templateConfig;
        private static StrategyConfig strategyConfig;
    
        static {
            try {
                windowsConfigIniFile = new Wini(new File("config.ini"));
    
                commonPath = windowsConfigIniFile
                        .get("global-config")
                        .get("output-directory", "C:\\Users\\Administrator\\Desktop\\Sample");
    
                globalConfig = getGlobalConfig();
                dataSourceConfig = getDataSourceConfig();
                packageConfig = getPackageConfig();
                templateConfig = getTemplateConfig();
                strategyConfig = getStrategyConfig();
    
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
        private static boolean getBooleanValue(String value) {
            return "true".equals(value);
        }
    
        private static DateType getDateTypeValue(String value) {
            DateType dateType = null;
            switch (value) {
                case "default":
                    dateType = DateType.ONLY_DATE;
                    break;
                case "sql-type":
                    dateType = DateType.SQL_PACK;
                    break;
                case "new-type":
                    dateType = DateType.TIME_PACK;
                    break;
            }
            return dateType;
        }
    
        private static IdType getIdTypeValue(String value) {
            IdType idType = null;
            switch (value) {
                case "0":
                    idType = IdType.AUTO;
                    break;
                case "1":
                    idType = IdType.NONE;
                    break;
                case "2":
                    idType = IdType.INPUT;
                    break;
                case "3":
                    idType = IdType.ID_WORKER;
                    break;
                case "4":
                    idType = IdType.UUID;
                    break;
                case "5":
                    idType = IdType.ID_WORKER_STR;
                    break;
            }
            return idType;
        }
    
        /**
         * 全局配置
         * @param
         * @return com.baomidou.mybatisplus.generator.config.GlobalConfig
         * @author Cloud9
         * @createTime 2022/5/31 14:33
         *
         */
        private static GlobalConfig getGlobalConfig() {
            Profile.Section section = windowsConfigIniFile.get("global-config");
            GlobalConfig globalConfig = new GlobalConfig();
    
            globalConfig.setOutputDir(commonPath + "/src/main/java");
            globalConfig.setAuthor(section.get("author", "cloud9"));
    
            globalConfig.setOpen(getBooleanValue(section.get("open-after-complete", STATUS_FALSE)));
            globalConfig.setFileOverride(getBooleanValue(section.get("overwrite", STATUS_TRUE)));
            globalConfig.setActiveRecord(getBooleanValue(section.get("ar-mode", STATUS_FALSE)));
            globalConfig.setSwagger2(getBooleanValue(section.get("enable-swagger2", STATUS_FALSE)));
            globalConfig.setKotlin(getBooleanValue(section.get("kotlin-mode", STATUS_FALSE)));
    
            // 主键策略
            globalConfig.setIdType(getIdTypeValue(section.get("id-type", "0")));
    
            // 日期类型选择
            globalConfig.setDateType(getDateTypeValue(section.get("date-type", "default")));
    
            // 文件格式命名
            globalConfig.setEntityName(section.get("entity-format", "%sDTO"));
            globalConfig.setMapperName(section.get("mapper-format", "%sDAO"));
    //        globalConfig.setXmlName(section.get("xml-format", "%sMapper"));
    //        globalConfig.setServiceName(section.get("service-format", "I%sService"));
    //        globalConfig.setServiceImplName(section.get("service-impl-format", "%sServiceImpl"));
    //        globalConfig.setControllerName(section.get("controller-format", "%sController"));
            return globalConfig;
        }
    
        /**
         * 获取库名
         * @param
         * @return java.lang.String
         * @author Cloud9
         * @createTime 2022/5/31 14:54
         *
         */
        private static String getSchemaValue() {
            Profile.Section section = windowsConfigIniFile.get("db-config");
            String connectUrl = section.get("connectUrl");
            int i1 = connectUrl.lastIndexOf("/") + 1;
            int i2 = connectUrl.lastIndexOf("?");
            return connectUrl.substring(i1, i2 == -1 ? connectUrl.length() -1 : i2);
        }
    
        /**
         * 数据源配置
         * @param
         * @return com.baomidou.mybatisplus.generator.config.DataSourceConfig
         * @author Cloud9
         * @createTime 2022/5/31 14:33
         *
         */
        private static DataSourceConfig getDataSourceConfig() {
            Profile.Section section = windowsConfigIniFile.get("db-config");
            DataSourceConfig dsc = new DataSourceConfig();
            dsc.setUrl(section.get("connectUrl"));
            dsc.setSchemaName(getSchemaValue());
            dsc.setDriverName(section.get("driverClass"));
            dsc.setUsername(section.get("username"));
            dsc.setPassword(section.get("password"));
    
            dsc.setDbQuery(new MySqlQuery());
            dsc.setDbType(DbType.MYSQL);
            dsc.setTypeConvert(new MySqlTypeConvert());
            return dsc;
        }
    
        /**
         * 包配置
         * @param
         * @return com.baomidou.mybatisplus.generator.config.PackageConfig
         * @author Cloud9
         * @createTime 2022/5/31 14:54
         *
         */
        private static PackageConfig getPackageConfig() {
            Profile.Section section = windowsConfigIniFile.get("package-config");
            PackageConfig pkgConfig = new PackageConfig();
            pkgConfig.setParent(section.get("parent"));
    
            pkgConfig.setModuleName(section.get("module", "test"));
            pkgConfig.setEntity(section.get("entity", "po"));
            pkgConfig.setXml(section.get("xml", "mapper"));
            pkgConfig.setMapper(section.get("mapper", "dao"));
            pkgConfig.setService(section.get("service", "service"));
            pkgConfig.setServiceImpl(section.get("service-impl", "service.impl"));
            pkgConfig.setController(section.get("controller", "controller"));
            return pkgConfig;
        }
    
        /**
         * 模板配置
         * @param
         * @return com.baomidou.mybatisplus.generator.config.TemplateConfig
         * @author Cloud9
         * @createTime 2022/5/31 14:53
         *
         */
        private static TemplateConfig getTemplateConfig() {
            // 配置模板
            TemplateConfig templateConfig = new TemplateConfig();
    
            // 配置自定义输出模板
            // 指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别
            // templateConfig.setEntity("templates/entity2.java");
            // templateConfig.setService();
            // templateConfig.setController();
    
            templateConfig.setXml(null);
            templateConfig.setEntity("tpl/entity.java");
            templateConfig.setController("tpl/controller.java");
            templateConfig.setEntityKt("tpl/entity.kt");
            templateConfig.setMapper("tpl/mapper.java");
            templateConfig.setService("tpl/service.java");
            templateConfig.setServiceImpl("tpl/serviceImpl.java");
            return templateConfig;
        }
    
        /**
         * 注入配置
         * @param
         * @return com.baomidou.mybatisplus.generator.InjectionConfig
         * @author Cloud9
         * @createTime 2022/5/31 15:14
         *
         */
        private static InjectionConfig getInjectionConfig() {
            // 自定义配置
            InjectionConfig cfg = new InjectionConfig() {
                @Override
                public void initMap() {
                    // to do nothing
                }
            };
    
            // 如果模板引擎是 freemarker
            String templatePath = "/tpl/mapper.xml.ftl";
            // 如果模板引擎是 velocity
            // String templatePath = "/templates/mapper.xml.vm";
    
            // 自定义输出配置
            List<FileOutConfig> focList = new ArrayList<>();
            // 自定义配置会被优先输出
            focList.add(new FileOutConfig(templatePath) {
                @Override
                public String outputFile(TableInfo tableInfo) {
                    // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
                    return
                        commonPath
                        + "/src/main/resources/mapper/"
                        + packageConfig.getModuleName()
                        + "/"
                        + tableInfo.getMapperName()
                        + StringPool.DOT_XML;
                }
            });
            /*
             * cfg.setFileCreate(new IFileCreate() {
             *
             * @Override public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) { //
             * 判断自定义文件夹是否需要创建 checkDir("调用默认方法创建的目录"); return false; } });
             */
            cfg.setFileOutConfigList(focList);
            return cfg;
        }
    
        /**
         * 策略配置
         * @param
         * @return com.baomidou.mybatisplus.generator.config.StrategyConfig
         * @author Cloud9
         * @createTime 2022/5/31 15:14
         *
         */
        private static StrategyConfig getStrategyConfig() {
            Profile.Section section = windowsConfigIniFile.get("strategy-config");
            StrategyConfig strategyConfig = new StrategyConfig();
            strategyConfig.setNaming(NamingStrategy.underline_to_camel);
            strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);
    
            //strategy.setSuperEntityClass("com.baomidou.ant.common.BaseEntity");
            strategyConfig.setEntityLombokModel(getBooleanValue(section.get("lombok-model", STATUS_TRUE)));
            strategyConfig.setRestControllerStyle(getBooleanValue(section.get("rest-controller", STATUS_TRUE)));
    
            strategyConfig.setSuperControllerClass(section.get("super-controller", "cn.ymcd.comm.base.BaseController"));
            strategyConfig.setSuperServiceImplClass(section.get("super-service-impl", "com.baomidou.mybatisplus.extension.service.impl.ServiceImpl"));
    
            strategyConfig.setInclude(includesHandle((section.get("includes").split(","))));
    
            //strategy.setSuperEntityColumns("id");
            strategyConfig.setControllerMappingHyphenStyle(getBooleanValue(section.get("hyphen-style", STATUS_TRUE)));
            strategyConfig.setTablePrefix(packageConfig.getModuleName() + "_");
    
            return strategyConfig;
        }
    
        private static String[] includesHandle(String[] includes) {
            for (int i = 0; i < includes.length; i++) includes[i] = includes[i].trim();
            return includes;
        }
    
        private static AutoGenerator getAutoGenerator() {
            AutoGenerator mpg = new AutoGenerator();
            mpg.setGlobalConfig(globalConfig);
            mpg.setDataSource(dataSourceConfig);
            mpg.setPackageInfo(packageConfig);
            mpg.setCfg(getInjectionConfig());
            mpg.setStrategy(strategyConfig);
            mpg.setTemplate(templateConfig);
            mpg.setTemplateEngine(new FreemarkerTemplateEngine());
            return mpg;
        }
    
        public static void main(String[] args) {
            getAutoGenerator().execute();
        }
    }
    

      

     还是走配置文件设置参数:

    config.ini 放在项目的目录下面,不是src里面

    [global-config]
    # 输出目录
    output-directory = C:\Users\Administrator\Desktop\AISW-TEST
    
    # 创建者
    author = dzz
    
    # 完成后打开目录
    open-after-complete = true
    
    # 覆写输出
    overwrite = true
    
    # 开启Swagger2注解
    enable-swagger2 = false
    
    # ActiveRecord 模式
    ar-mode = false
    
    # 转换科特林代码
    kotlin-mode = false
    
    # 生成的时间类型,(default, sql-type, new-type)
    date-type = default
    
    # 主键生成策略 (0 1 2 3 4 5)
    id-type = 0
    
    # 实体类文件命名格式
    entity-format = %sDTO
    
    # 映射接口文件命名格式
    mapper-format = %sDAO
    
    # 映射接口文件命名格式
    xml-format = %sMapper
    
    # 服务接口文件命名格式
    service-format = I%sService
    
    # 服务实现文件命名格式
    service-impl-format = %sServiceImpl
    
    # 控制器文件命名格式
    controller-format = %sController
    
    [db-config]
    # 连接配置参数
    connectUrl = jdbc:mysql://192.168.209.11:3306/ymcd_aisw?useSSL=false&serverTimeZone=GMT
    driverClass = com.mysql.jdbc.Driver
    username = root
    password = 123456
    
    [package-config]
    # 包名配置
    parent = cn.cloud9.sample
    module = test
    entity = po
    mapper = dao
    xml = mapper
    service = service
    service-impl = service.impl
    controller = controller
    
    [strategy-config]
    # 开启Lombok注解?
    lombok-model = true
    # 是否@RestController
    rest-controller = true
    
    # 指定生成的表名,多个用逗号进行分隔
    includes = aisw_netplace, aisw_netplace_sync_log
    
    # 继承的控制器类名
    super-controller = cn.ymcd.comm.base.BaseController
    
    # 继承的服务实现类名
    super-service-impl = cn.ymcd.comm.base.BaseService
    
    # 接口地址 驼峰转至连字符
    hyphen-style = true

     

    模板部分

     因为设置模板文件路径,所以是采用自定义模板来输出

    templateConfig.setXml(null);
    templateConfig.setEntity("tpl/entity.java");
    templateConfig.setController("tpl/controller.java");
    templateConfig.setEntityKt("tpl/entity.kt");
    templateConfig.setMapper("tpl/mapper.java");
    templateConfig.setService("tpl/service.java");
    templateConfig.setServiceImpl("tpl/serviceImpl.java");
    

    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>
    
    /**
     * ${table.name!} ${table.comment!} 前端控制器
     * 
     * @projectName:
     * @author:${author}
     * @date:${date}
     * @version 1.0
     */
    <#if restControllerStyle>
    @RestController
    <#else>
    @Controller
    </#if>
    @RequestMapping("${r'${api.path}'}<#if package.ModuleName??>/${package.ModuleName}</#if>")
    <#if kotlin>
    class ${table.controllerName}<#if superControllerClass??> : ${superControllerClass}()</#if>
    <#else>
    <#if superControllerClass??>
    public class ${table.controllerName} extends ${superControllerClass} {
    <#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>
    
    /**
     * ${table.name!} ${table.comment!} 实体类
     *
     * @projectName:
     * @author:${author}
     * @date:${date}
     * @version 1.0
     */
    <#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>
    <#-- ----------  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};
    
    /**
     * ${table.name!} ${table.comment!} Mapper 接口
     * 
     * @projectName:
     * @author:${author}
     * @date:${date}
     * @version 1.0
     */
    <#if kotlin>
    interface ${table.mapperName} : ${superMapperClass}<${entity}>
    <#else>
    public interface ${table.mapperName} extends ${superMapperClass}<${entity}> {
    
    }
    </#if>
    

     

    service.java.ftl

    package ${package.Service};
    
    import ${package.Entity}.${entity};
    import ${superServiceClassPackage};
    
    /**
     * ${table.name!} ${table.comment!} 服务类
     * 
     * @projectName:
     * @author:${author}
     * @date:${date}
     * @version 1.0
     */
    <#if kotlin>
    interface ${table.serviceName} : ${superServiceClass}<${entity}>
    <#else>
    public interface ${table.serviceName} extends ${superServiceClass}<${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>
    

      

    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;
    
    /**
     * ${table.name!} ${table.comment!} 服务实现类
     * 
     * @projectName:
     * @author:${author}
     * @date:${date}
     * @version 1.0
     */
    @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>
    

     

    打包之后,自己新建目录做一个工具包

    Start.cmd 只是方便启动Jar包

    java -jar comm-sample-mp-generator-1.0.0.jar

    如果要保留执行日志可以

    java -jar comm-sample-mp-generator-1.0.0.jar > excute.log

    还需要有一个Java的环境变量存在

     

  • 相关阅读:
    他扎根农村种植双孢菇,从门外汉成为了“土专家”
    农村小伙成立生态农业基地,带领村民打开致富新门路
    小伙让蜜柚成为真正的“黄金柚”,帮助600多农户发家致富
    js时间格式化函数,支持Unix时间戳
    js时间格式化函数,支持Unix时间戳
    js时间格式化函数,支持Unix时间戳
    js时间格式化函数,支持Unix时间戳
    Netty随记之ChannelInboundHandlerAdapter、SimpleChannelInboundHandler
    Netty随记之ChannelInboundHandlerAdapter、SimpleChannelInboundHandler
    Netty随记之ChannelInboundHandlerAdapter、SimpleChannelInboundHandler
  • 原文地址:https://www.cnblogs.com/mindzone/p/16331081.html
Copyright © 2020-2023  润新知