(2022最新版本)SpringBoot 整合 MyBatis Plus 代码生成器

1.导入Maven

2.编写GeneratorVO

3.编写service代码

4.编写controller测试

5.请求接口

6.查看生成的目录


1.导入Maven

  1. <dependency>
  2. <groupId>com.baomidou</groupId>
  3. <artifactId>mybatis-plus-generator</artifactId>
  4. <version>3.5.1</version>
  5. </dependency>

2.编写GeneratorVO

用于自定义数据库地址、表明、作者等请求参数

  1. import lombok.Data;
  2. import javax.validation.constraints.NotBlank;
  3. import javax.validation.constraints.NotNull;
  4. import javax.validation.constraints.Size;
  5. import java.io.Serializable;
  6. import java.util.List;
  7. /**
  8. * @Author liuy
  9. * @Description mybatis-plus自动生成vo
  10. * @Date 2022/01/19 10:04
  11. * @Version 1.0
  12. */
  13. @Data
  14. public class GeneratorVO implements Serializable {
  15. private static final long serialVersionUID = 4123743393008761522L;
  16. /**
  17. * 数据库连接地址
  18. */
  19. @NotBlank(message = "数据库连接地址必填")
  20. private String dataSourceUrl;
  21. /**
  22. * 数据库用户名
  23. */
  24. @NotBlank(message = "数据库用户名必填")
  25. private String dataSourceUserName;
  26. /**
  27. * 数据库密码
  28. */
  29. @NotBlank(message = "数据库密码必填")
  30. private String dataSourcePassword;
  31. /**
  32. * 自动生成表名集合
  33. */
  34. @NotNull(message = "表名不能为空")
  35. @Size(min = 1, message = "表名集合至少包含一个元素")
  36. private List<String> tables;
  37. /**
  38. * 作者
  39. */
  40. @NotBlank(message = "作者必填")
  41. private String author;
  42. /**
  43. * 逻辑删除字段名
  44. */
  45. @NotBlank(message = "逻辑删除字段名必填")
  46. private String deleteColumnName;
  47. /**
  48. * 乐观锁字段名
  49. */
  50. private String versionColumnName;
  51. }

3.编写service代码

  1. import com.baomidou.mybatisplus.generator.AutoGenerator;
  2. import com.baomidou.mybatisplus.generator.config.*;
  3. import com.soboot.gen.domain.vo.GeneratorVO;
  4. import org.springframework.stereotype.Service;
  5. import java.util.Collections;
  6. import java.util.List;
  7. /**
  8. * @Author liuy
  9. * @Description mybatis-plus generator自动生成代码服务
  10. * @Date 2022/01/19 10:08
  11. * @Version 1.0
  12. */
  13. @Service("generatorService")
  14. public class GeneratorService {
  15. /**
  16. * 数据源配置
  17. */
  18. private DataSourceConfig dataSourceConfig(String url, String username, String password) {
  19. return new DataSourceConfig.Builder(url, username, password).build();
  20. }
  21. /**
  22. * 策略配置
  23. */
  24. private StrategyConfig.Builder strategyConfig(String deleteColumn, String versionColumn, List<String> tables) {
  25. StrategyConfig.Builder strategyConfig = new StrategyConfig.Builder().addInclude(tables);
  26. strategyConfig.entityBuilder().enableLombok().formatFileName("%s")
  27. .mapperBuilder().formatMapperFileName("%sMapper").formatXmlFileName("%sMapperXml")
  28. .controllerBuilder().enableRestStyle().formatFileName("%sAction")
  29. .serviceBuilder().formatServiceFileName("%sService").formatServiceImplFileName("%sService")
  30. //逻辑删除字段 和 默认乐观锁字段
  31. .entityBuilder().logicDeleteColumnName(deleteColumn).versionColumnName(versionColumn);
  32. return strategyConfig; // 设置需要生成的表名
  33. }
  34. /**
  35. * 全局配置
  36. */
  37. private GlobalConfig.Builder globalConfig(String author) {
  38. GlobalConfig.Builder globalConfig = new GlobalConfig.Builder().fileOverride();
  39. globalConfig.author(author) //作者
  40. .outputDir("D://generator") //输出路径(写到java目录)
  41. .commentDate("yyyy-MM-dd")
  42. .fileOverride(); //开启覆盖之前生成的文件
  43. return globalConfig;
  44. }
  45. /**
  46. * 包配置
  47. */
  48. private PackageConfig.Builder packageConfig() {
  49. PackageConfig.Builder packageConfig = new PackageConfig.Builder();
  50. packageConfig.parent("com")
  51. //父包模块名
  52. .moduleName("soboot")
  53. .entity("entity")
  54. .service("service")
  55. .serviceImpl("serviceImpl")
  56. .controller("controller")
  57. .mapper("mapper")
  58. .xml("mapper")
  59. //默认生成路径 D盘
  60. .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://"));
  61. return packageConfig;
  62. }
  63. /**
  64. * 模板配置
  65. */
  66. private TemplateConfig.Builder templateConfig() {
  67. TemplateConfig.Builder templateConfig = new TemplateConfig.Builder();
  68. templateConfig
  69. //自定义service模板
  70. .serviceImpl("/template/template.java");
  71. return templateConfig;
  72. }
  73. /**
  74. * 注入配置
  75. */
  76. private InjectionConfig.Builder injectionConfig() {
  77. // 测试自定义输出文件之前注入操作,该操作再执行生成代码前 debug 查看
  78. return new InjectionConfig.Builder().beforeOutputFile((tableInfo, objectMap) -> {
  79. System.out.println("tableInfo: " + tableInfo.getEntityName() + " objectMap: " + objectMap.size());
  80. });
  81. }
  82. /**
  83. * 基础代码生成
  84. * @param generatorVO
  85. */
  86. public void generatorBase(GeneratorVO generatorVO) {
  87. AutoGenerator generator = new AutoGenerator(dataSourceConfig(generatorVO.getDataSourceUrl(), generatorVO.getDataSourceUserName(), generatorVO.getDataSourcePassword()));
  88. generator.strategy(strategyConfig(generatorVO.getDeleteColumnName(), generatorVO.getVersionColumnName(), generatorVO.getTables()).build());
  89. generator.injection(injectionConfig().build());
  90. generator.template(templateConfig()
  91. .build());
  92. generator.global(globalConfig(generatorVO.getAuthor()).build());
  93. generator.execute();
  94. }
  95. }

我这里自定义了service生成的模板 template.java.vm

watermark_type_d3F5LXplbmhlaQ_shadow_50_text_Q1NETiBA5o6C5o6C5LiJ55Sf5pyJ5bm4_size_9_color_FFFFFF_t_70_g_se_x_16

上面两个模板之前想用但是感觉没太必要

如果大家需要自定义模板可以去Mybatis Plus的包里找到默认模板

watermark_type_d3F5LXplbmhlaQ_shadow_50_text_Q1NETiBA5o6C5o6C5LiJ55Sf5pyJ5bm4_size_20_color_FFFFFF_t_70_g_se_x_16

如果想自定义生成模板那么需要在 GeneratorService代码里的templateConfig中修改配置路径

watermark_type_d3F5LXplbmhlaQ_shadow_50_text_Q1NETiBA5o6C5o6C5LiJ55Sf5pyJ5bm4_size_20_color_FFFFFF_t_70_g_se_x_16 1

我这里只改了service的生成模板

template.java.vm

  1. package ${package.ServiceImpl};
  2. import ${package.Entity}.${entity};
  3. import ${package.Mapper}.${table.mapperName};
  4. import org.springframework.stereotype.Service;
  5. import com.soboot.common.core.com.soboot.dict.service.AbstractService;
  6. /**
  7. * <p>
  8. * $!{table.comment} 服务
  9. * </p>
  10. *
  11. * @author ${author}
  12. * @since ${date}
  13. */
  14. @Service
  15. #if(${kotlin})
  16. open class ${table.serviceImplName} : ${superServiceImplClass}<${table.mapperName}, ${entity}>(), ${table.serviceName} {
  17. }
  18. #else
  19. public class ${table.serviceImplName} extends AbstractService<${table.mapperName}, ${entity}> {
  20. }
  21. #end

AbstractService.java

  1. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  2. import com.baomidou.mybatisplus.extension.service.IService;
  3. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. /**
  6. * 基础服务类
  7. *
  8. * @param <T> 实体
  9. * @param <M> mapper
  10. * @author liuy
  11. * @version 1.0
  12. * @date 2021-10-13 09:48:46
  13. */
  14. public abstract class AbstractService<M extends BaseMapper<T>,T> extends ServiceImpl<M, T> implements IService<T> {
  15. @Autowired
  16. @SuppressWarnings("all")
  17. protected M mapper;
  18. }

4.编写controller测试

  1. import com.soboot.gen.domain.vo.GeneratorVO;
  2. import com.soboot.gen.service.GeneratorService;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.validation.annotation.Validated;
  5. import org.springframework.web.bind.annotation.PostMapping;
  6. import org.springframework.web.bind.annotation.RequestBody;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.bind.annotation.RestController;
  9. /**
  10. * 代码生成 操作处理
  11. *
  12. * @author liuy
  13. */
  14. @RequestMapping("/gen")
  15. @RestController
  16. public class GenController
  17. {
  18. @Autowired
  19. private GeneratorService generatorService;
  20. /**
  21. * 基础代码生成
  22. * @param generatorVO 参数vo
  23. */
  24. @PostMapping("/baseGen")
  25. public void generatorBase(@RequestBody @Validated GeneratorVO generatorVO) {
  26. generatorService.generatorBase(generatorVO);
  27. }
  28. }

5.请求接口

watermark_type_d3F5LXplbmhlaQ_shadow_50_text_Q1NETiBA5o6C5o6C5LiJ55Sf5pyJ5bm4_size_20_color_FFFFFF_t_70_g_se_x_16 2

6.查看生成的目录

watermark_type_d3F5LXplbmhlaQ_shadow_50_text_Q1NETiBA5o6C5o6C5LiJ55Sf5pyJ5bm4_size_19_color_FFFFFF_t_70_g_se_x_16

默认生成路径我写在了=D://generator下面

如果要改可以GeneratorService代码里的globalConfig全局配置里更改

watermark_type_d3F5LXplbmhlaQ_shadow_50_text_Q1NETiBA5o6C5o6C5LiJ55Sf5pyJ5bm4_size_20_color_FFFFFF_t_70_g_se_x_16 3

有兴趣可以看看MybatisPlus Generator源码

MybatisPlus Generator源码地址

MybatisPlus自动生成工具就此整合完成

祝大家生活愉快!!!

发表评论

表情:
评论列表 (有 0 条评论,78人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MyBatis-Plus代码生成器

    > 前言:本文主要讲解如何使用MyBatis-Plus的代码生成器,能根据数据库表自动生成相对于的实体类、映射层、服务层、控制器层,使用代码生成器能大大提高工作效率,减少重复工