mybatis-plus (新) 代码生成器 封装


1.引入依赖


com.ehaomiao
ehm-common-generation
2.在需要生成代码包下随便创建一个java文件 配置表名 作者名 表前缀名
    public static void main(String[] args) {
      new GenerationFactory()
          .table("mv_behavior_alarm_log",
                  "mv_motor_commodity_alarm_log",
                  "mv_absence_alarm_log")
          .author("xzj")
          .tablePrefix("mv_")
          .build();
  }
3.运行程序后会在同级目录下生成 controller、mapper.java、mapper.xml、service、serviceImpl、entity文件

原理解析:

1.获取调用方所在项目路径


//获取项目所在路径
String jarWholePath = Thread.currentThread()
.getContextClassLoader()
.getResource("./")
.getPath();
String jarPath = new File(jarWholePath)
.getParentFile()
.getParentFile()
.getAbsolutePath();

2.获取调用方所在包名


//获取包名
      String packageName = null;
      try {
          packageName = Class.forName(Thread.currentThread().getStackTrace()[2].getClassName()).getPackage().getName();
      } catch (ClassNotFoundException e) {
          e.printStackTrace();
      }
      //父包名称
      StringBuilder parentName = new StringBuilder();
      //模块名称
      String moduleName = "";
      //包名不为null
      if (packageName != null) {
          String[] split = packageName.split("\\.");
          //父包名称
          for (int i = 0; i < split.length - 1; i++) {
              parentName.append(split[i]).append(".");
          }
          if (parentName.length() > 0) {
              parentName.deleteCharAt(parentName.length() - 1);
          }
          moduleName = split[split.length - 1];
      }

3.获取调用方资源文件下application.yml 配置数据库资源

spring:
datasource:
dynamic:
  datasource:
  master:
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://192.168.1.165:4406/ehm_cloud_data_center?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
    username: root
    password: root

//从yml文件中读取连接数据库地址 用户名 密码
      Yaml yaml = new Yaml();
      InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("application.yml");
      Map map = yaml.loadAs(in, Map.class);
      Map master =
              (Map) ((Map) ((Map) ((Map) ((Map)
                      map.get("spring")).get("datasource")).get("dynamic")).get("datasource")).get("master");
      String url = master.get("url").toString();
      String username = master.get("username").toString();
      String password = master.get("password").toString();

4.调用mybatis plus 方法 生成代码,模块resources下自定义entity.java.ftl、 controller.java.ftl 模板

//mybatis plus 方法
      String finalModuleName = moduleName;
      FastAutoGenerator.create(url,
                      username,
                      password)
              .globalConfig(builder -> {
                  builder.author(author) // 设置作者
                          .fileOverride() // 覆盖已生成文件
                          .outputDir(jarPath + "/src/main/java"); // 指定输出目录
              })
              //包名配置,这个配置指/src/main/java下开始的包路径
              .packageConfig(builder -> {
                  builder.parent(parentName.toString()) // 设置父包名
                          .moduleName(finalModuleName) // 设置父包模块名
                          .xml("mapper.mapping");
              })
              //策略配置
              .strategyConfig(builder -> {
                  builder.addInclude(table) // 设置需要生成的表名
                          .addTablePrefix(tablePrefix)
                          //自定义配置继承父包 HmBaseMapper 此类为我们公司扩展类
                          .mapperBuilder()
                          .superClass(HmBaseMapper.class)
                          .build()
                          //实体类配置
                          .entityBuilder()
                          .enableLombok()
                          .enableChainModel()
                          .enableTableFieldAnnotation()
                          //继承父类,忽略父类公共字段
                          .superClass(BaseEntity.class)
                          .addIgnoreColumns("create_time", "create_by", "update_time", "update_by")
                          .build()
                          //service配置
                          .serviceBuilder()
                          .superServiceClass(IHmService.class)
                          .superServiceImplClass(HmServiceImpl.class)
                          .build();
              })
              // 使用Freemarker引擎模板,默认的是Velocity引擎模板
              .templateEngine(new FreemarkerTemplateEngine())
              //自定义模板
              .templateConfig(builder -> {
                  builder.entity("/templates/entity.java")
                          .controller("/templates/controller.java")
                          .build();
              })
              .execute();
  }