SpringBoot整合Mybatis-Plus之代码生成器配置

SpringBoot工程中整合Mybatis-Plus时,配置一下代码生成器可以节省开发时间。

AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。

官网链接:

  • Mybatis-Plus代码生成器
  • Mybatis-Plus代码生成器配置

接下来看下整合Mybatis-Plus的3.3.X版本的步骤:

一.引入依赖

pom.xml文件中引入依赖:

<dependency>
    <groupId>org.projectlombokgroupId>
    <artifactId>lombokartifactId>
    <optional>trueoptional>
dependency>

<dependency>
    <groupId>com.baomidougroupId>
    <artifactId>mybatis-plus-boot-starterartifactId>
    <version>3.3.2version>
dependency>

<dependency>
    <groupId>com.baomidougroupId>
    <artifactId>mybatis-plus-generatorartifactId>
    <version>3.3.2version>
dependency>

<dependency>
    <groupId>org.freemarkergroupId>
    <artifactId>freemarkerartifactId>
    <version>2.3.30version>
dependency>

若是自定义模板需要到 mybatis-plus 官方github仓库中将templates模板下载下来,将需要的模板页面放入工程的resources下的templates文件夹下。参考链接:Mybatis-Plus代码生成器

然后就可以在代码生成器中指定模版路径了如String templatePath = “/templates/mapper.xml.ftl”;

二.引入mapper.xml.ftl模板代码

自定义模板时进行相关引入。



<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.columnName},
#list>
        ${table.fieldNames}
    sql>

#if>
mapper>

三.编写代码生成器

引入依赖后就可以编写代码生成器了,若自定义模板就需要引入第二步的模板代码,在代码生成器中进行相关指定。若不需要自定义可以不引入。代码中相关自定义的代码也需要注释掉。可以多尝试修改相关配置进行查看最终生成效果。

import com.baomidou.mybatisplus.annotation.DbType;
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.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 

* 自动代码生成器 *

*/
public class MpGenerator { // 需要生成表的名称数组 private static final String[] TABLE_NAME_ARRAY = new String[]{ "tb_baseline", "tb_product", "tb_test_event", "tb_android_benchmark", "tb_apk_start_statistic", "tb_apk_start_statistic_noload"}; /** *

* MySQL 代码生成 *

*/
public static void main(String[] args) { AutoGenerator mpg = new AutoGenerator(); // 选择 freemarker 引擎,默认 Veloctiy mpg.setTemplateEngine(new FreemarkerTemplateEngine()); // 全局配置 GlobalConfig gc = new GlobalConfig(); String projectPath = System.getProperty("user.dir"); // 生成代码的路径 gc.setOutputDir(projectPath + "/baselineperf/src/main/java"); gc.setFileOverride(true); gc.setActiveRecord(false);// 不需要ActiveRecord特性的请改为false gc.setEnableCache(false);// XML 二级缓存 gc.setBaseResultMap(true);// XML ResultMap gc.setBaseColumnList(true);// XML columList // .setKotlin(true) 是否生成 kotlin 代码 gc.setAuthor("zlg"); gc.setOpen(false); // 自定义文件命名,注意 %s 会自动填充表实体属性! // gc.setMapperName("%sDao"); // gc.setXmlName("%sDao"); // gc.setServiceName("MP%sService"); // gc.setServiceImplName("%sServiceDiy"); // gc.setControllerName("%sAction"); mpg.setGlobalConfig(gc); // 数据源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setDbType(DbType.MYSQL); dsc.setDriverName("com.mysql.cj.jdbc.Driver"); dsc.setUsername("XXXXXX"); dsc.setPassword("XXXXXX"); dsc.setUrl("jdbc:mysql://10.150.154.190:3306/BasePerformance?useUnicode=true&characterEncoding=utf8&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC&createDatabaseIfNotExist=true"); mpg.setDataSource(dsc); // 包配置 PackageConfig pc = new PackageConfig(); pc.setParent("com.transsion.microservice.baselineperf"); pc.setModuleName(""); pc.setController("web.rest.controller"); // pc.setEntity("entity"); pc.setMapper("dao"); // pc.setService("service"); // pc.setServiceImpl("service.impl"); pc.setXml("dao.xml"); mpg.setPackageInfo(pc); // 注入自定义配置,可以在 VM 中使用 cfg.abc 【可无】 InjectionConfig cfg = new InjectionConfig() { @Override public void initMap() { // Map map = new HashMap(); // map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp"); // this.setMap(map); } }; // 如果模板引擎是 freemarker String templatePath = "/templates/mapper.xml.ftl"; //String entityPath = "/templates/entity.java.ftl"; // String mapperPath = "/templates/mapper.java.ftl"; // 自定义输出配置 List<FileOutConfig> focList = new ArrayList<FileOutConfig>(); // 自定义 xxList.jsp 生成 // focList.add(new FileOutConfig("/template/list.jsp.vm") { // @Override // public String outputFile(TableInfo tableInfo) { // // 自定义输入文件名称 // return "D://my_" + tableInfo.getEntityName() + ".jsp"; // } // }); // cfg.setFileOutConfigList(focList); // mpg.setCfg(cfg); // 调整 xml 生成目录演示 // 自定义配置会被优先输出 focList.add(new FileOutConfig(templatePath) { @Override public String outputFile(TableInfo tableInfo) { // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!! //+ pc.getModuleName() return projectPath + "/baselineperf/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML; } }); // //dao数据访问对象 // focList.add(new FileOutConfig(mapperPath) { // @Override // public String outputFile(TableInfo tableInfo) { // // 自定义输出文件名 ,将entity文件实体类放到model中 // return projectPath + "/src/main/java/com/transsion/microservice/baselineperf/dao" // + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_JAVA; // } // }); cfg.setFileOutConfigList(focList); mpg.setCfg(cfg); // 关闭默认 xml 生成,调整生成 至 根目录 TemplateConfig tc = new TemplateConfig(); // 配置自定义输出模板 // 指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别 // tc.setEntity("templates/entity.java"); tc.setXml(null); mpg.setTemplate(tc); // 自定义模板配置,可以 copy 源码 mybatis-plus/src/main/resources/templates 下面内容修改, // 放置自己项目的 src/main/resources/templates 目录下, 默认名称一下可以不配置,也可以自定义模板名称 // TemplateConfig tc = new TemplateConfig(); // tc.setController("..."); // tc.setEntity("..."); // tc.setMapper("..."); // tc.setXml("..."); // tc.setService("..."); // tc.setServiceImpl("..."); // 如上任何一个模块如果设置 空 OR Null 将不生成该模块。 // mpg.setTemplate(tc); // 策略配置:数据库表配置 StrategyConfig strategy = new StrategyConfig(); // strategy.setCapitalMode(true);// 全局大写命名 ORACLE 注意 //strategy.setTablePrefix(new String[] { "tlog_", "tsys_" });// 此处可以修改为您的表前缀 strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略 // 列名生成策略(下划线转驼峰命名) strategy.setColumnNaming(NamingStrategy.underline_to_camel); // 需要生成的表 strategy.setInclude(TABLE_NAME_ARRAY); strategy.setRestControllerStyle(true); //生成RestController控制器 // 驼峰转连字符 strategy.setControllerMappingHyphenStyle(false); //@RequestMapping("//test-event") // strategy.setTablePrefix(pc.getModuleName() + "_"); // strategy.setExclude(new String[]{"test"}); // 排除生成的表 // 自定义实体父类 // strategy.setSuperEntityClass("com.baomidou.demo.TestEntity"); // 自定义实体,公共字段 // strategy.setSuperEntityColumns(new String[] { "test_id", "age" }); // 自定义 mapper 父类 // strategy.setSuperMapperClass("com.baomidou.demo.TestMapper"); // 自定义 service 父类 // strategy.setSuperServiceClass("com.baomidou.demo.TestService"); // 自定义 service 实现类父类 // strategy.setSuperServiceImplClass("com.baomidou.demo.TestServiceImpl"); // 自定义 controller 父类 // strategy.setSuperControllerClass("com.baomidou.demo.TestController"); // 【实体】是否为lombok模型(默认 false) strategy.setEntityLombokModel(true); // strategy.setTablePrefix(new String[] { "tb_", "tsys_" });// 此处可以修改为您的表前缀 strategy.setTablePrefix("tb_"); // 生成实体时去掉表名的前缀,如 tb_ // 【实体】是否为链式模型(默认 false) // public User setName(String name) {this.name = name; return this;} strategy.setChainModel(true); // 是否生成实体时,生成字段注解(默认为 true) strategy.setEntityTableFieldAnnotationEnable(true); // Boolean类型字段是否移除is前缀(默认 false) strategy.setEntityBooleanColumnRemoveIsPrefix(true); // 【实体】是否生成字段常量(默认 false) // public static final String ID = "test_id"; strategy.setEntityColumnConstant(false); mpg.setStrategy(strategy); // 执行生成 mpg.execute(); // 打印注入设置【可无】 // System.err.println(mpg.getCfg().getMap().get("abc")); } }

参考链接:

  • SpringBoot+MybatisPlus+代码生成器整合(真正让你专心做业务)

你可能感兴趣的:(mybatis,springboot,mybatis)