java springboot+mybaitsPlus 自动化生成代码, 自定义生成

本文详细介绍如何使用SpringBoot结合MyBatisPlus自动化生成代码,包括配置步骤、自定义模板及执行结果。通过简单配置即可快速生成实体类、控制器、服务层等代码,极大提升开发效率。

随着编码工具的越来越便捷与强大, 越来越多的重复性工作被工具自动化所代替,
(研发工具的程序员正在一点一点干掉编写普通业务类代码的程序员,尤其是企业级小微级项目开发, 便捷了高效了,不进步慢慢就被替代了, 相煎何太急啊!)
好了,其他的就不多说了,下面要记录的是springboot+mybatisPlus自动化生成代码, 官网中有完整的例子, 咱也就不在这里赘述了, 想更深入研究了解的可以直接查看官网https://mp.baomidou.com/guide/generator.html
那为什么还要写这篇文章呢?
两个问题
1. 自己做一下记录,以后需要了可以直接使用
2. 做了一部分自定义文件配置

直接上代码
首先需要在文件中引入相关包文件

<dependency>
	<groupId>com.baomidou</groupId>
	<artifactId>mybatis-plus-generator</artifactId>
	<version>3.1.1</version>
</dependency>
<!-- 这是模板引擎依赖 -->
<dependency>
	<groupId>org.freemarker</groupId>
	<artifactId>freemarker</artifactId>
	<version>2.3.28</version>
</dependency>
<dependency>
	<groupId>org.apache.velocity</groupId>
	<artifactId>velocity-engine-core</artifactId>
	<version>2.2</version>
</dependency>

上述引入包中根据需要选择freemarker或velocity任意一种, 这两个只有自定义时才会用到,自动化生成不需要引入这两个包
freemarker模板扫描的文件是.ftl
velocity模板扫描的文件是.vm (不设置是默认为velocity)

package com.example.myplusdemo.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.HashMap;
import java.util.Map;

public class CodeGenerator {

    /**
     *
     * @Title: main
     * @Description: 生成
     * @param args
     */
    public static void main(String[] args) {
        AutoGenerator mpg = new AutoGenerator();
        //mpg.setTemplateEngine(new FreemarkerTemplateEngine()); .ftl模板
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        gc.setOutputDir("E://workspace//myplusdemo11//src//main//java");
        gc.setFileOverride(false);
        gc.setActiveRecord(false);// 不需要ActiveRecord特性的请改为false
        gc.setEnableCache(false);// XML 二级缓存
        gc.setBaseResultMap(true);// XML ResultMap
        gc.setBaseColumnList(true);// XML columList
        gc.setAuthor("lcx");// 作者

        // 自定义文件命名,注意 %s 会自动填充表实体属性!
        gc.setControllerName("%sController");
        gc.setServiceName("%sService");
        gc.setServiceImplName("%sServiceImpl");
        gc.setMapperName("%sDao");
        gc.setXmlName("%sMapper");
        mpg.setGlobalConfig(gc);

        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setDbType(DbType.MYSQL);
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("用户名");
        dsc.setPassword("密码");
        dsc.setUrl("地址");
        mpg.setDataSource(dsc);

        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setTablePrefix(new String[] { });// 此处可以修改为您的表前缀
        strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
        strategy.setInclude(new String[] { "activity"}); // 需要生成的表 单个
 		//strategy.setInclude(new String[] { "activity", "activity_theme"});需要生成的表 多个
 
        strategy.setSuperServiceClass(null);
        strategy.setSuperServiceImplClass(null);
        strategy.setSuperMapperClass(null);
        mpg.setStrategy(strategy);

        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent("com.example.myplusdemo");
        pc.setController("controller");
        pc.setService("service");
        pc.setServiceImpl("service.impl");
        pc.setMapper("dao");
        pc.setEntity("entity");
        pc.setXml("mapper");
        mpg.setPackageInfo(pc);

        // 自定义配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
            Map<String, Object> map = new HashMap<>();
            map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
            this.setMap(map);

            //entity2.java.vm
            //自定义属性注入abc=$!{cfg.abc}
            }
        };
        mpg.setCfg(cfg);
        // 放置自己项目的 src/main/resources/templates 目录下, 默认名称一下可以不配置,也可以自定义模板名称
        //TemplateConfig tc = new TemplateConfig(); tc.setXml(null); mpg.setTemplate(tc);
        TemplateConfig tc = new TemplateConfig();

        //tc.setEntity("/templates/service");
        //tc.setService("/templates/service");
        /*tc.setController("");///templates/Controller.java
        tc.setMapper("");
        tc.setXml("");
        tc.setService("");
        tc.setServiceImpl("");*/
        // 如上任何一个模块如果设置 空 OR Null 将不生成该模块。
        mpg.setTemplate(tc);
        // 执行生成
        mpg.execute();
    }
}

可以直接使用, 执行结果如下图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面这些就是官网自动生成的文件信息与内容了, 目前我使用的mybaitsPlus版本中提供了17个常用常规方法, 上述生成的代码中, 只需要在controller层添加控制器方法与路径,就可直接使用了,是不是太方便了,

下面是自定义文件部分, 只放上来一个实体类生成文件用于记录相关使用到的标签引用等
文件存放地址:
在这里插入图片描述

package ${package.Entity};

#foreach($pkg in ${table.importPackages})
#if($pkg == "java.time.LocalDateTime")
import java.util.Date;
#else
import ${pkg};
#end
#end
import lombok.Data;
import com.baomidou.mybatisplus.annotation.TableName;

## 表备注,作者,日期
/**
 * $!{table.comment}
 * @author ${author}
 * @since ${date}
 */
@TableName("${table.name}")
@Data
public class ${entity} implements Serializable {

## ----------  BEGIN 字段循环遍历  ----------
#foreach($field in ${table.fields})
## 主键策略
#if(${field.keyFlag})
    #if(${field.keyIdentityFlag})
    @TableId(value = "${field.name}", type = IdType.AUTO)
    #elseif(!$null.isNull(${idType}) && "$!idType" != "")
    @TableId(value = "${field.name}", type = IdType.${idType})
    #elseif(${field.convert})
    @TableId("${field.name}")
    #end
#end
    /**
     * ${field.comment};
     */
#if(${field.propertyType} == "LocalDateTime")
    private Date ${field.propertyName};
#else
    private ${field.propertyType} ${field.propertyName};
#end

#end
## ----------  END 字段循环遍历  ----------
## ---------- 使用的lombok,所以后面的get/set都不要 ---------------
}

各种自动化配置在官网中均有介绍哦!

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值