content: package com.wenmrong.community1.community.generator;
  
  import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
  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 org.apache.commons.lang3.StringUtils;
  
  import java.util.ArrayList;
  import java.util.List;
  import java.util.Scanner;
  
  /**
   * 代码生成器
   *
   * @Author Lizhou
   */
  public class CodeGenerator {
  
      /**
       * <p>
       * 读取控制台内容
       * </p>
       */
      public static String scanner(String tip) {
          Scanner scanner = new Scanner(System.in);
          StringBuilder help = new StringBuilder();
          help.append("请输入" + tip + "：");
          System.out.println(help.toString());
          if (scanner.hasNext()) {
              String ipt = scanner.next();
              if (StringUtils.isNotEmpty(ipt)) {
                  return ipt;
              }
          }
          throw new MybatisPlusException("请输入正确的" + tip + "！");
      }
  
      /**
       * 自动生成代码
       */
      public static void main(String[] args) {
          // 代码生成器
          AutoGenerator mpg = new AutoGenerator();
          // TODO 全局配置
          GlobalConfig gc = new GlobalConfig();
          String projectPath = System.getProperty("user.dir");
          // 生成文件的输出目录【默认 D 盘根目录】
          gc.setOutputDir(projectPath + "/src/main/java");
          // 作者
          gc.setAuthor("autodidact");
          // 是否打开输出目录
          gc.setOpen(false);
          // controller 命名方式，注意 %s 会自动填充表实体属性
          gc.setControllerName("%sController");
          // service 命名方式
          gc.setServiceName("%sService");
          // serviceImpl 命名方式
          gc.setServiceImplName("%sServiceImpl");
          // mapper 命名方式
          gc.setMapperName("%sMapper");
          // xml 命名方式
          gc.setXmlName("%sMapper");
          // 开启 swagger2 模式
          gc.setSwagger2(false);
          // 是否覆盖已有文件
          gc.setFileOverride(false);
          // 是否开启 ActiveRecord 模式
          gc.setActiveRecord(true);
          // 是否在xml中添加二级缓存配置
          gc.setEnableCache(false);
          // 是否开启 BaseResultMap
          gc.setBaseResultMap(true);
          // XML columList
          gc.setBaseColumnList(false);
          // 全局 相关配置
          mpg.setGlobalConfig(gc);
  
          // TODO 数据源配置
          DataSourceConfig dsc = new DataSourceConfig();
          dsc.setUrl("jdbc:mysql://114.132.200.49:3310/community?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&useSSL=true&characterEncoding=UTF-8");
          dsc.setDriverName("com.mysql.cj.jdbc.Driver");
          dsc.setUsername("root");
          dsc.setPassword("123456");
          mpg.setDataSource(dsc);
  
          // TODO 包配置
          PackageConfig pc = new PackageConfig();
          // 父包名。如果为空，将下面子包名必须写全部， 否则就只需写子包名
          pc.setParent("com.wenmrong.community1.community");
          // Entity包名
          pc.setEntity("model");
          // Service包名
          pc.setService("service");
          // Service Impl包名
          pc.setServiceImpl("service.impl");
          mpg.setPackageInfo(pc);
  
          // TODO 自定义配置
          InjectionConfig cfg = new InjectionConfig() {
              @Override
              public void initMap() {
                  // to do nothing
              }
          };
          // 输出文件配置
          List<FileOutConfig> focList = new ArrayList<>();
          focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {
              @Override
              public String outputFile(TableInfo tableInfo) {
                  // 自定义输入文件名称
                  return projectPath + "/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper.xml";
              }
          });
          // 自定义输出文件
          cfg.setFileOutConfigList(focList);
          mpg.setCfg(cfg);
          mpg.setTemplate(new TemplateConfig().setXml(null));
  
          // TODO 策略配置
          StrategyConfig strategy = new StrategyConfig();
          // 数据库表映射到实体的命名策略，驼峰原则
          strategy.setNaming(NamingStrategy.underline_to_camel);
          // 字数据库表字段映射到实体的命名策略，驼峰原则
          strategy.setColumnNaming(NamingStrategy.underline_to_camel);
          // 实体是否生成 serialVersionUID
          strategy.setEntitySerialVersionUID(false);
          // 是否生成实体时，生成字段注解
          strategy.setEntityTableFieldAnnotationEnable(true);
          // 使用lombok
          strategy.setEntityLombokModel(true);
          // 设置逻辑删除键
          strategy.setLogicDeleteFieldName("del_flag");
          // TODO 指定生成的bean的数据库表名
          strategy.setInclude(scanner("表名，多个英文逗号分割").split(","));
          // 驼峰转连字符
          strategy.setControllerMappingHyphenStyle(true);
          mpg.setStrategy(strategy);
          // 选择 freemarker 引擎需要指定如下加，注意 pom 依赖必须有！
          mpg.setTemplateEngine(new FreemarkerTemplateEngine());
          mpg.execute();
      }
  }