记录一个Mybatis Plus的代码生成器

326 阅读2分钟

Mybatis Plus代码生成器

    本文主要介绍了怎么样快速从0到1,创建一个Mybatis plus的代码生成器,可以通过配置,一键生成Service、
dao、entity、以及mapper.xml,以提高工作效率。

1.首先引入相关的maven依赖。

<!-- mybatis plus 生成器所需要依赖开始 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.4.1</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.22</version>
</dependency>

<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.30</version>
</dependency>

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
</dependency>

<!-- mybatis plus 生成器所需要依赖结束 -->

这几个依赖是我们所建立的生成器所必须的依赖。其中mybatis-plus-generator即生成器依赖,由于我们使用的数据库是mysql,所以引入mysql相关驱动依赖,如需使用其它数据库,对应引入即可。freemarker是一个模板引擎,我们是基于该模板进行生成的。junit是一个单元测试的依赖。如需要其它依赖如lombok也是对应引入即可。

2.生成器代码

package com.test.generate;
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;

/**
* @author jamin
* @date 2021/10/06
*/
public class GenerateMybatisPlus {

  //文件输出位置
  private static String outputDir = "/Users/xxx/xxx";
  //基本包名
  private static String basepackage = "xxx.xxx.xxx.xxx";
  //要生成的表名
     private static String[] tables = {"tableName"};
  //table前缀
  private static String prefix = "";
  //作者
  private static String authorName = "xxx";
  //是否生成mapper.xml文件StrategyLog.java
  private static Boolean creatXml = true;
  //是否生成controller文件
  private static Boolean creatController = true;
  //数据库四要素
  private static String diverName = "com.mysql.cj.jdbc.Driver";
  private static String url = "jdbc:mysql://xxx.xxx.xxx.xxx:3306/accessname?characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=CTT";
  private static String userName = "username";
  private static String password = "password";


  public static void main(String[] args) {
     //代码生成器
     AutoGenerator mpg = new AutoGenerator();
     //全局配置
     GlobalConfig gc = new GlobalConfig();
     gc.setOutputDir(outputDir);
     gc.setAuthor(authorName);
     gc.setServiceName("%sService");
     gc.setServiceImplName("%sServiceImpl");
     gc.setMapperName("%sMapper");
     gc.setOpen(true);
     gc.setFileOverride(true);
     gc.setActiveRecord(true);
     gc.setEnableCache(false);//xml二级缓存
     gc.setBaseResultMap(true);//xml ResultMap
     gc.setBaseColumnList(true);//xml columList
     gc.setSwagger2(false);//实体属性是否开启swagger2注解
     mpg.setGlobalConfig(gc);

     //数据源配置
     DataSourceConfig dsc = new DataSourceConfig();
     dsc.setUrl(url);
     //dsc.setSchemaName("public");
     dsc.setDriverName(diverName);
     dsc.setUsername(userName);
     dsc.setPassword(password);
     mpg.setDataSource(dsc);

     //包配置
     InjectionConfig cfg = new InjectionConfig() {
        @Override
        public void initMap() {
           //to do nothing
        }
     };
     //如果模板引起是freemarker
     String templatePath = "/templates/mapper.xml.ftl";
     //自定义输出配置
     ArrayList<FileOutConfig> focList = new ArrayList<>();
     //自定义输出配置会被优先输出
     focList.add(new FileOutConfig(templatePath) {
        @Override
        public String outputFile(TableInfo tableInfo) {
           //自定义输出文件名,如果你的entity设置了前缀,此处注意xml的名称会跟着发生变化!!!!
           return outputDir + "/src/main/resources/mapper/" + tableInfo.getEntityName() + "mapper" + StringPool.DOT_XML;
        }
     });
     cfg.setFileOutConfigList(focList);
     //是否生成xml文件
     if (creatXml) {
        mpg.setCfg(cfg);
     }
     //配置模板
     TemplateConfig templateConfig = new TemplateConfig();
     templateConfig.setXml(null);
     //是否生成controller
     if (creatController) {
        templateConfig.setController(null);
     }
     mpg.setTemplate(templateConfig);

     // 包配置
     PackageConfig pc = new PackageConfig();
     pc.setParent(basepackage);
     mpg.setPackageInfo(pc);

     //策略配置
     StrategyConfig strategy = new StrategyConfig();
     //命名规则
     strategy.setNaming(NamingStrategy.underline_to_camel);
     //实体是否使用Lombok插件
     strategy.setEntityLombokModel(true);
     strategy.setInclude(tables);//需要生成的表
     strategy.setTablePrefix(prefix);
     mpg.setStrategy(strategy);
     mpg.setTemplateEngine(new FreemarkerTemplateEngine());
     mpg.execute();
  }
}
    需要修改的地方有文件输出位置、包名、表名、作者、数据库配置包括数据库的ip、端口、账号密码等配置信息等。

3.文件生成

 点击运行,即可。
 

image.png 生成成功后会在目标位置生成相关文件。

image.png

image.png