服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - SpringBoot项目使用mybatis-plus逆向自动生成全套代码

SpringBoot项目使用mybatis-plus逆向自动生成全套代码

2021-12-20 13:41纵有千千星晚 Java教程

在JavaWeb工程中,每一个SSM新项目或者说是SpringBoot项目也好,都少不了model、controller、service、dao等层次的构建。使用mybatis-plus逆向可以自动生成,感兴趣的可以了解一下

1.在你的SpringBoot项目下新建子模块项目

pom.xml添加以下依赖:

<properties>
      <java.version>1.8</java.version>
  </properties>

  <dependencies>
      <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
      </dependency>
      <dependency>
          <groupId>com.baomidou</groupId>
          <artifactId>mybatis-plus-generator</artifactId>
          <version>3.3.2</version>
      </dependency>
      <dependency>
          <groupId>com.baomidou</groupId>
          <artifactId>mybatis-plus-extension</artifactId>
          <version>3.3.2</version>
      </dependency>
      <dependency>
          <groupId>org.projectlombok</groupId>
          <artifactId>lombok</artifactId>
          <optional>true</optional>
      </dependency>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-freemarker</artifactId>
          <version>2.3.1.RELEASE</version>
      </dependency>
  </dependencies>

  <build>
      <plugins>
          <plugin>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-maven-plugin</artifactId>
          </plugin>
      </plugins>
  </build>

ps:名称随意,最好带上generator 来辨别这是代码自动生成模块

SpringBoot项目使用mybatis-plus逆向自动生成全套代码

 

2.在此模块下新建一个包与一个java类 类名: CodeGenerator

SpringBoot项目使用mybatis-plus逆向自动生成全套代码

完整代码如下:

import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
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.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
* @Description: 代码生成类
*/
public class CodeGenerator {
  //数据库连接参数
  public static String driver = "com.mysql.cj.jdbc.Driver";
  public static String url = "jdbc:mysql://localhost:3306/rht_test?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true";
  public static String username="root";
  public static String password="123456";
  //父级别包名称
  public static String parentPackage = "cn.rht";
  //代码生成的目标路径
  public static String generateTo = "/rht-generator/src/main/java";
  //mapper.xml的生成路径
  public static String mapperXmlPath = "/rht-generator/src/main/resources/mapper";
  //控制器的公共基类,用于抽象控制器的公共方法,null值表示没有父类
  public static String baseControllerClassName ;
  //业务层的公共基类,用于抽象公共方法
  public static String baseServiceClassName ;
  //作者名
  public static String author = "rht.cn";
  //模块名称,用于组成包名
  public static String modelName = "portal";
  //Mapper接口的模板文件,不用写后缀 .ftl
  public static String mapperTempalte = "/ftl/mapper.java";

  /**
   * <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 + "!");
  }

  /**
   * RUN THIS
   */
  public static void main(String[] args) {
      // 代码生成器
      AutoGenerator mpg = new AutoGenerator();

      // 全局配置
      GlobalConfig gc = new GlobalConfig();
      String projectPath = System.getProperty("user.dir");
      gc.setOutputDir(projectPath + generateTo);
      gc.setAuthor(author);
      gc.setOpen(false);
      //设置时间类型为Date
      gc.setDateType(DateType.TIME_PACK);
      //开启swagger
      //gc.setSwagger2(true);
      //设置mapper.xml的resultMap
      gc.setBaseResultMap(true);
      mpg.setGlobalConfig(gc);

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

      // 包配置
      PackageConfig pc = new PackageConfig();
      pc.setEntity("model");
      //pc.setModuleName(scanner("模块名"));
      pc.setModuleName(modelName);
      pc.setParent(parentPackage);
      mpg.setPackageInfo(pc);

      // 自定义配置
      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 + mapperXmlPath
                      + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
          }
      });
      cfg.setFileOutConfigList(focList);
      mpg.setCfg(cfg);
      mpg.setTemplate(new TemplateConfig().setXml(null));
      mpg.setTemplate(new TemplateConfig().setMapper(mapperTempalte));

      // 策略配置
      StrategyConfig strategy = new StrategyConfig();
      strategy.setNaming(NamingStrategy.underline_to_camel);
      //字段驼峰命名
      strategy.setColumnNaming(NamingStrategy.underline_to_camel);
      //设置实体类的lombok
      strategy.setEntityLombokModel(true);
      //设置controller的父类
      if (baseControllerClassName!=null) strategy.setSuperControllerClass(baseControllerClassName);
      //设置服务类的父类
      if (baseServiceClassName !=null ) strategy.setSuperServiceImplClass(baseServiceClassName);
      // strategy.
      //设置实体类属性对应表字段的注解
      strategy.setEntityTableFieldAnnotationEnable(true);
      //设置表名
      String tableName = scanner("表名, all全部表");
      if(! "all".equalsIgnoreCase(tableName)){
          strategy.setInclude(tableName);
      }

      strategy.setTablePrefix(pc.getModuleName() + "_");
      strategy.setRestControllerStyle(true);
      mpg.setStrategy(strategy);

      // 选择 freemarker 引擎需要指定如下加,注意 pom 依赖必须有!
      mpg.setTemplateEngine(new FreemarkerTemplateEngine());
      mpg.execute();
  }

}

 

3.在 resources 下新建 文件夹,用来存放 mapper文件

新建模板文件: mapper.java.ftl

SpringBoot项目使用mybatis-plus逆向自动生成全套代码

SpringBoot项目使用mybatis-plus逆向自动生成全套代码

模板完整代码如下:

package ${package.Mapper};

import ${package.Entity}.${entity};
import ${superMapperClassPackage};
import org.springframework.stereotype.Repository;

/**
* <p>
* ${table.comment!} Mapper 接口
* </p>
*
* @author ${author}
* @since ${date}
*/
<#if kotlin>
interface ${table.mapperName} : ${superMapperClass}<${entity}>
<#else>
@Repository
public interface ${table.mapperName} extends ${superMapperClass}<${entity}> {

}
</#if>

 

4.配置CodeGenerator类

ps:请根据自己实际路径配置

SpringBoot项目使用mybatis-plus逆向自动生成全套代码

 

5.启动代码生成类main方法

ps:输入all 将会自动生成配置数据库下的所有配置文件,或者直接输入单表名称生成某一个表的Controller,mapper,service,model层与mapper.xml文件

SpringBoot项目使用mybatis-plus逆向自动生成全套代码

下面是我输入表名为:user,自动生成的部分文件信息展示

SpringBoot项目使用mybatis-plus逆向自动生成全套代码

User实体类

SpringBoot项目使用mybatis-plus逆向自动生成全套代码

UserMapper.xml文件

SpringBoot项目使用mybatis-plus逆向自动生成全套代码

如果你有很多表要生成时,但又不想全部生成时,可以在CodeGenerator类代码中134行代码

//设置表名
      String tableName = scanner("表名, all全部表");
      if(! "all".equalsIgnoreCase(tableName)){
          strategy.setInclude(tableName);
      }

替换为:

String[] tableNames = {"user","dept"};//数据库表名的集合
for (int i = 0; i <tableNames.length ; i++) {
  strategy.setInclude(tableNames);
}

来生成自己想要生成的文件

 

6.删除文件

最后:也是重要的一点,在您将这些文件复制到了项目模块上的时候,留下CodeGenerator类与文件夹下的mapper.java.ftl配置,其他生成的请及时删除

至于原因是将来业务拓展后,数据库新增表后,只要新创建表的文件,如果不删除以前生成过的文件,到时候找起来比较麻烦,没必要给自己添这层麻烦

SpringBoot项目使用mybatis-plus逆向自动生成全套代码

到此这篇关于SpringBoot项目使用mybatis-plus逆向自动生成全套代码的文章就介绍到这了,更多相关mybatis-plus逆向自动生成代码内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_44980116/article/details/112381136

延伸 · 阅读

精彩推荐
  • Java教程Java实现抢红包功能

    Java实现抢红包功能

    这篇文章主要为大家详细介绍了Java实现抢红包功能,采用多线程模拟多人同时抢红包,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙...

    littleschemer13532021-05-16
  • Java教程xml与Java对象的转换详解

    xml与Java对象的转换详解

    这篇文章主要介绍了xml与Java对象的转换详解的相关资料,需要的朋友可以参考下...

    Java教程网2942020-09-17
  • Java教程20个非常实用的Java程序代码片段

    20个非常实用的Java程序代码片段

    这篇文章主要为大家分享了20个非常实用的Java程序片段,对java开发项目有所帮助,感兴趣的小伙伴们可以参考一下 ...

    lijiao5352020-04-06
  • Java教程小米推送Java代码

    小米推送Java代码

    今天小编就为大家分享一篇关于小米推送Java代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    富贵稳中求8032021-07-12
  • Java教程Java8中Stream使用的一个注意事项

    Java8中Stream使用的一个注意事项

    最近在工作中发现了对于集合操作转换的神器,java8新特性 stream,但在使用中遇到了一个非常重要的注意点,所以这篇文章主要给大家介绍了关于Java8中S...

    阿杜7482021-02-04
  • Java教程升级IDEA后Lombok不能使用的解决方法

    升级IDEA后Lombok不能使用的解决方法

    最近看到提示IDEA提示升级,寻思已经有好久没有升过级了。升级完毕重启之后,突然发现好多错误,本文就来介绍一下如何解决,感兴趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    这篇文章主要介绍了Java使用SAX解析xml的示例,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java BufferWriter写文件写不进去或缺失数据的解决

    Java BufferWriter写文件写不进去或缺失数据的解决

    这篇文章主要介绍了Java BufferWriter写文件写不进去或缺失数据的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望...

    spcoder14552021-10-18