SpringBoot 集成MyBatis-Plus-Generator(最新版3.5.2版本)自动生成代码(附带集成MyBatis-Plus)

这篇具有很好参考价值的文章主要介绍了SpringBoot 集成MyBatis-Plus-Generator(最新版3.5.2版本)自动生成代码(附带集成MyBatis-Plus)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

官方文档

  • 快速入门
  • 代码生成器配置(新)

示例项目技术栈

  • spring boot 2.3.12.RELEASE
  • mybatis 3.5.2
  • mybatis plus 3.5.2
  • mybatis plus generator 3.5.2
  • mysql 8.0.17
  • velocity 2.3
  • hutool 5.8.15
  • druid 1.2.8
  • lombok 自带

示例程序选择的技术目前各项技术的稳定版本。

前言

相信大家厌烦重复的造轮子过程,编写与数据库表对应的实体类,接着再进行创建各种层次的包(mapper,service,impl),而现在一款神器登场了,它就是:MpBatis-Plus的代码自动生成器。能够节约大部分时间,还能覆盖许多增删改查方法,加快我们的开发速度。

 项目源地址放在gitee仓库,想要源代码的读者也可以根据实际情况自取,对你有帮助的话不妨点个赞加个Star⭐吧

代码源地址PracticeCode: 练习

项目搭建

1. 创建表

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` bigint(0) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'yeye', '123');

SET FOREIGN_KEY_CHECKS = 1;

2. 创建Spring Boot项目

创建Spring Boot项目,在pom.xml文件中引入如下依赖:

<properties>
  <java.version>1.8</java.version>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  <spring-boot.version>2.3.12.RELEASE</spring-boot.version>
  <hutool.version>5.8.15</hutool.version>
  <mybatis-plus.version>3.5.2</mybatis-plus.version>
  <velocity.version>2.3</velocity.version>
  <mysql.version>8.0.17</mysql.version>
  <fastjson.version>2.0.5</fastjson.version>
  <druid.version>1.2.8</druid.version>
</properties>

<dependencies>
  <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>${fastjson.version}</version>
  </dependency>

  <!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
  <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>${druid.version}</version>
  </dependency>
  <!-- mysql驱动 -->
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>${mysql.version}</version>
    <scope>runtime</scope>
  </dependency>


  <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
  <dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>${hutool.version}</version>
  </dependency>

  <dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>${mybatis-plus.version}</version>
  </dependency>

  <dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>${mybatis-plus.version}</version>
  </dependency>

  <dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>${velocity.version}</version>
  </dependency>

  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>

  <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    <exclusions>
      <exclusion>
        <groupId>org.junit.vintage</groupId>
        <artifactId>junit-vintage-engine</artifactId>
      </exclusion>
    </exclusions>
  </dependency>
</dependencies>


MyBatis Plus Generator支持的模板引擎有Velocity、Beetl、FreeMarker,笔者这里选择的是MyBatis Plus Generator默认的模板引擎 — Velocity 2.3,选择不同的模板引擎导入不同的模板即可。

3. 创建代码生成器启动类

数据源配置和全局代码配置类

String password = "123456";
String username = "root";
String url = "jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai";
DataSourceConfig.Builder dataSourceConfig = new DataSourceConfig.Builder(url, username, password);
String finalProjectPath = System.getProperty("user.dir"); //当前项目根目录

// dataSourceConfig数据源
FastAutoGenerator.create(dataSourceConfig)
// 全局代码配置类
.globalConfig(builder -> {
    builder.author("yeye") // 设置作者
    .enableSwagger() // 开启 swagger 模式
    .fileOverride() // 覆盖已生成文件
    .disableOpenDir() //禁止打开输出目录
    .outputDir(finalProjectPath + "/src/main/java"); // 指定输出目录
})
// 包配置
.packageConfig(builder -> {
    ///
})
// 策略配置
.strategyConfig(builder -> {
    ///
})
// 自定义模版引擎
.injectionConfig(consumer -> {
    ///
})
// 选择模板引擎
.templateEngine(
    ///
)
// 执行
.execute();

包配置

FastAutoGenerator.create(dataSourceConfig)
// 全局代码配置类
.globalConfig(builder -> {
    //
})
// 包配置
.packageConfig(builder -> {
    builder.parent("com.yeye") // 设置父包名
    .entity("model") //设置entity包名
    .controller("web.controller")//设置controller包名
    .mapper("dao")//设置mapper包名
    .service("service")//设置service包名
    .serviceImpl("service.impl")//设置impl包名
    .other("other")//设置other包名
    .pathInfo(Collections.singletonMap(OutputFile.xml, finalProjectPath + "/src/main/resources/mapper")); // 设置mapperXml生成路径
})
// 策略配置
.strategyConfig(builder -> {
    ///
})
// 自定义模版引擎
.injectionConfig(consumer -> {
    ///
})
// 选择模板引擎
.templateEngine(
    ///
)
// 执行
.execute();

在包配置中,笔者配置了父包名,配置了mybatis mapper文件存储路径,配置 Entity 包名、Mapper 包名、Service 包名、Controller 包名的。

策略配置

// dataSourceConfig数据源
FastAutoGenerator.create(dataSourceConfig)
//
})
// 包配置
.packageConfig(builder -> {
    ///
})
// 策略配置
.strategyConfig(builder -> {

    if (!CollectionUtils.isEmpty(tableList)) {
        builder.addInclude(tableList);
    }

    builder.addTablePrefix("wms_");// 设置过滤表前缀

    builder.entityBuilder() // entity配置
    .enableRemoveIsPrefix()
    .enableTableFieldAnnotation()
    .enableLombok();

    builder.controllerBuilder() // controller配置
    .enableRestStyle();

    builder.serviceBuilder() // service配置
    .formatServiceFileName("%sService")
    .formatServiceImplFileName("%sServiceImpl")
    .fileOverride();

    builder.mapperBuilder() // mapper配置
    .enableBaseResultMap()
    .enableMapperAnnotation()
    .formatMapperFileName("%sDao")
    .formatXmlFileName("%sMapper")
    .enableBaseColumnList();
    if (isOverride) { // 覆写配置
        builder.entityBuilder() // entity配置
        .fileOverride();
        builder.controllerBuilder() // controller配置
        .fileOverride();
        builder.serviceBuilder() // service配置
        .fileOverride();
        builder.mapperBuilder() // mapper配置
        .fileOverride();
    }
})
// 自定义模版引擎
.injectionConfig(consumer -> {
    ///
})
// 选择模板引擎
.templateEngine(
    ///
)
// 执行
.execute();

在策略配置中,笔者配置了需要生成的表名、过滤表前缀、开启 Lombok、覆盖已生成文件、下划线转驼峰命、Service 接口文件及实现类的文件名以及是否覆写。

自定义模版引擎

// dataSourceConfig数据源
FastAutoGenerator.create(dataSourceConfig)
// 全局代码配置类
.globalConfig(builder -> {
    //
})
// 包配置
.packageConfig(builder -> {
    ///
})
// 策略配置
.strategyConfig(builder -> {
    ///
})
// 自定义模版引擎
.injectionConfig(consumer -> {
    Map<String, String> customFile = new HashMap<>();
    customFile.put("DTO.java", "/templates/entityDTO.java.ftl"); //自定义模版引擎
    consumer.customFile(customFile);
})
// 选择模板引擎
.templateEngine(
    ///
)
// 执行
.execute();

选择模板引擎

// dataSourceConfig数据源
FastAutoGenerator.create(dataSourceConfig)
// 全局代码配置类
//
})
// 包配置
.packageConfig(builder -> {
    ///
})
// 策略配置
.strategyConfig(builder -> {
    ///
})
// 自定义模版引擎
.injectionConfig(consumer -> {
    ///
})
// 选择模板引擎
.templateEngine(
new VelocityTemplateEngine()
)
// 执行
.execute();

4. 代码生成器启动类完整代码

完整的代码生成器启动类 CodeGenerator.java 内容如下:

package com.yeye.util;


import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
import org.springframework.util.CollectionUtils;

import java.util.*;

public class CodeGenerator {

  public static void main(String[] args) {
    String password = "123456";
    String username = "root";
    String url = "jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai";
    DataSourceConfig.Builder dataSourceConfig = new DataSourceConfig.Builder(url, username, password);

    //String finalProjectPath = System.getProperty("user.dir"); //当前项目根目录
    String finalProjectPath = Objects.requireNonNull(CodeGenerator.class.getClassLoader().getResource(""))
      .getPath().replace("/target/classes/", "");

    List<String> tableList = new ArrayList<>();
    tableList.add("user");    // 生成全部table注释add掉就好
    // 写死
    creteModel(dataSourceConfig, finalProjectPath, Boolean.TRUE, tableList);

    // 手动输入(互动式)
    createSingleModel(dataSourceConfig,finalProjectPath);
  }

  private static void creteModel(DataSourceConfig.Builder dataSourceConfig,
                                 String finalProjectPath,
                                 Boolean isOverride,
                                 List<String> tableList) {
    // dataSourceConfig数据源
    FastAutoGenerator.create(dataSourceConfig)
      // 全局代码配置类
      .globalConfig(builder -> {
        builder.author("yeye") // 设置作者
//          .enableSwagger() // 开启 swagger 模式
          .fileOverride() // 覆盖已生成文件
          .disableOpenDir() //禁止打开输出目录
          .outputDir(finalProjectPath + "/src/main/java"); // 指定输出目录
      })
      // 包配置
      .packageConfig(builder -> {
        builder.parent("com.yeye") // 设置父包名
          .entity("model") //设置entity包名
          .controller("web.controller")
          .mapper("dao")
          .service("service")
          .serviceImpl("service.impl")
          .other("other")
          .pathInfo(Collections.singletonMap(OutputFile.xml, finalProjectPath + "/src/main/resources/mapper")); // 设置mapperXml生成路径

      })
      // 策略配置
      .strategyConfig(builder -> {

        if (!CollectionUtils.isEmpty(tableList)) {
          builder.addInclude(tableList);
        }

        builder.addTablePrefix("wms_");// 设置过滤表前缀

        builder.entityBuilder() // entity配置
          .enableRemoveIsPrefix()
          .enableTableFieldAnnotation()
          .enableLombok();

        builder.controllerBuilder() // controller配置
          .enableRestStyle();

        builder.serviceBuilder() // service配置
          .formatServiceFileName("%sService")
          .formatServiceImplFileName("%sServiceImpl")
          .fileOverride();

        builder.mapperBuilder() // mapper配置
          .enableBaseResultMap()
          .enableMapperAnnotation()
          .formatMapperFileName("%sDao")
          .formatXmlFileName("%sMapper")
          .enableBaseColumnList();
        if (isOverride) {
          builder.entityBuilder() // entity配置
            .fileOverride();
          builder.controllerBuilder() // controller配置
            .fileOverride();
          builder.serviceBuilder() // service配置
            .fileOverride();
          builder.mapperBuilder() // mapper配置
            .fileOverride();
        }
      })
      // 自定义模版引擎
      .injectionConfig(consumer -> {
        Map<String, String> customFile = new HashMap<>();
        // DTO
//        customFile.put("DTO.java", "/templates/entityDTO.java.ftl"); //自定义模版引擎
        consumer.customFile(customFile);
      })
      // 选择模板引擎
      .templateEngine(new VelocityTemplateEngine())
      // 执行
      .execute();
  }

  private static void createSingleModel(DataSourceConfig.Builder dataSourceConfig, String finalProjectPath) {
    FastAutoGenerator.create(dataSourceConfig)
      // 全局配置
      .globalConfig((scanner, builder) ->
        builder.author(scanner.apply("请输入作者名称?"))
          .fileOverride()
          .outputDir(finalProjectPath + "/src/main/java"))
      // 包配置
      .packageConfig(builder -> {
        builder.parent("com.yeye") // 设置父包名
          .entity("model") //设置entity包名
          .other("dao") // 设置dto包名
          .pathInfo(Collections.singletonMap(OutputFile.xml, finalProjectPath + "/src/main/resources/mapper")); // 设置mapperXml生成路径

      })
      // 策略配置
      .strategyConfig((scanner, builder) -> builder.addInclude(getTables(scanner.apply("请输入表名,多个英文逗号分隔?所有输入 all")))
        .controllerBuilder().enableRestStyle()
        .entityBuilder().enableLombok()
        .mapperBuilder().enableBaseResultMap().enableBaseColumnList()
        .build())

      .execute();


  }

  // 处理 all 情况
  protected static List<String> getTables(String tables) {
    return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
  }

}

注意:全局配置中的用于覆盖已生成文件的方法fileOverride在当前版本中已过时,官方文档中目前还未更新,笔者使用 Boolean isOverride控制是否覆写代码。

另外,本文提供了两种生成方式,一种是写死的代码生成,另外一种是交互式生成方式,可自行选择使用。

5. 项目结构效果图

mybatis-plus-generator,开发工具,中间件,mybatis,spring boot,java,后端,spring

MyBatis-Plus使用实例

增删改查及自定义查询示例

@RestController
@RequestMapping("/user")
public class UserController {

  @Autowired
  private UserService userService;

  @GetMapping("list")
  public R list() {
    return R.ok().put("data", userService.list());
  }
  @GetMapping("count")
  public R count() {
    return R.ok().put("data", userService.count());
  }

  @GetMapping("info")
  public R info(@PathVariable("id") Long id) {
    return R.ok().put("data", userService.getById(id));
  }

  @GetMapping("query")
  public R query(@PathVariable("name") Long name) {
    return R.ok().put("data", userService
                      .getOne(new LambdaQueryWrapper<User>().eq(User::getName,name)));
  }

  @GetMapping("delete")
  public R delete(@PathVariable("id") Long id) {
    return R.ok().put("data", userService.removeById(id));
  }
  @PostMapping("save")
  public R save(@RequestParam User user) {
    return R.ok().put("data", userService.save(user));
  }

  @PostMapping("saveBatch")
  public R saveBatch(@RequestParam User user) {
    return R.ok().put("data", userService.saveBatch((Collection<User>) user));
  }
}

后记

MyBatis Plus Generator 根据默认模板生成的代码是比较简单的,在实际的应用中需要根据自身需要编写自定义模板引擎代码模板,实现自己的定制代码生成,对于笔者来说基本够用,能够满足日常的增删改查操作。

项目源地址放在gitee仓库,想要源代码的读者也可以根据实际情况自取,对你有帮助的话不妨点个赞加个Star⭐吧

代码源地址PracticeCode: 练习

如果这篇【文章】有帮助到你,希望可以给笔者点个赞👍,创作不易,相比官方的陈述,我更喜欢用直接用代码示例解析每一个有用的知识点,感兴趣的也可以关注一下笔者,后续也会更新更多的内容,例如状态机和工作流的实践,都会在后续慢慢更新。文章来源地址https://www.toymoban.com/news/detail-833929.html

到了这里,关于SpringBoot 集成MyBatis-Plus-Generator(最新版3.5.2版本)自动生成代码(附带集成MyBatis-Plus)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 最近正在集成SpringBoot与MyBatis-plus, MyBatis-Plus-Join体验感很好啊

    MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 损耗小:启动即会自动注入基本 CURD,性能基本无损耗

    2024年02月08日
    浏览(25)
  • MyBatis-Plus 可视化代码生成器mybatis-plus-generator-ui

    在基于Mybatis的开发模式中,很多开发者还会选择Mybatis-Plus来辅助功能开发,以此提高开发的效率。虽然Mybatis也有代码生成的工具,但Mybatis-Plus由于在Mybatis基础上做了一些调整,因此,常规的生成工具生成的代码还有一些不太符合预期。而且对于多数据库的支持不是很好。

    2024年02月04日
    浏览(27)
  • Java:mybatis-plus-generator-ui 基于Mybatis-Plus的代码自助生成器

    引用官方文档上的简介: 提供交互式的Web UI用于生成兼容mybatis-plus框架的相关功能代码,包括Entity,Mapper,Mapper.xml,Service,Controller等 ,可以自定义模板以及各类输出参数,也可通过SQL查询语句直接生成代码。 文档 github: https://github.com/davidfantasy/mybatis-plus-generator-ui gitee: https://g

    2024年02月10日
    浏览(26)
  • 【springboot3.x 记录】解决 springboot3 集成 mybatis-plus 报 sqlSession 异常

    2022-12-30,作者最新发布了 3.5.3.1 版本,不需要使用快照版本了 ========================= springboot3 已经发布正式版,第一时间尝鲜看看如何,但是在集成 mybatis-plus 最新版 3.5.2 的时候发现提示异常。 看来 springboot3 在注入这块做了调整,但目前 mybatis-plus 并没有适配到。 于是翻查

    2024年02月13日
    浏览(27)
  • 自动化生成代码:MyBatis 的 Generator与MyBatis-Plus 的 AutoGenerator

    自动化生成代码是现在一种非常常见的技术,它可以大大提高开发效率,减少重复劳动。而在 Java 开发中,MyBatis 是一个非常流行的 ORM 框架,而其中的 Generator 和 MyBatis-Plus 中的 AutoGenerator 是两个非常好用的自动化代码生成工具,下面我们来分别介绍一下它们的使用。 MyBati

    2024年02月03日
    浏览(27)
  • mybatis-plus-generator-ui 可视化代码生成器!

    它提供交互式的Web UI用于生成兼容mybatis-plus框架的相关功能代码,包括Entity,Mapper,Mapper.xml,Service,Controller等。 可以自定义模板以及各类输出参数,也可通过SQL查询语句直接生成代码。 git地址 :https://github.com/davidfantasy/mybatis-plus-generator-ui 1、引入依赖 2、新建程序入口,以main函

    2024年02月08日
    浏览(37)
  • 【花艺电商】SpringBoot集成MyBatis-Plus、Swagger2、SpringSecurity、OAuth2等技术整合开发

    目录 一、功能介绍 1. 说明 2. 功能实现 3. 技术应用 二、技术详述 1.MyBatis-Plus 主要体现 项目应用 2.SpringSecurity 应用作用 三、页面展示 1. 登入 2. 主页 3. 详情 4. 购物车 5. 订单 6. 沙箱支付 每篇一获 这个项目主要使用了 Spring Security 、 MyBatis-Plus 、 Redis 、 雪花ID 、 参数校验技

    2024年01月25日
    浏览(26)
  • Mybatis三剑客(一)在springboot中自动生成Mybatis【generator】

    1、pom.xml中新增plugin 2、新建resources/generatorConfig.xml 注意:         context 中内容是有顺序的         commentGenerator在前面s 3、idea中的terminal中执行mybatis自动生成命令  mvn mybatis-generator:generate

    2024年02月12日
    浏览(22)
  • springboot+maven插件调用mybatis generator自动生成对应的mybatis.xml文件和java类

    mybatis最繁琐的事就是sql语句和实体类,sql语句写在java文件里很难看,字段多的表一开始写感觉阻力很大,没有耐心,自动生成便成了最称心的做法。自动生成xml文件,dao接口,实体类,虽一直感觉不太优雅,但省去了很多麻烦,当表增加或修改字段的时候重新生成便轻松搞

    2024年02月14日
    浏览(22)
  • spring boot集成mybatis-plus——Mybatis Plus 查询数据(图文讲解)

     更新时间 2023-01-03 16:07:12 大家好,我是小哈。 本小节中,我们将学习如何通过 Mybatis Plus 查询数据库表中的数据。 在前面小节中,我们已经定义好了一个用于测试的用户表, 执行脚本如下: 定义一个名为  User  实体类: 不明白 Mybatis Plus 实体类注解的小伙伴,可参考前面

    2024年02月02日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包