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

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

正文


1.导入Maven


<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.1</version>
</dependency>


2.编写GeneratorVO


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

import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.List;
/**
 * @Author liuy
 * @Description mybatis-plus自动生成vo
 * @Date 2022/01/19 10:04
 * @Version 1.0
 */
@Data
public class GeneratorVO implements Serializable {
    private static final long serialVersionUID = 4123743393008761522L;
    /**
     * 数据库连接地址
     */
    @NotBlank(message = "数据库连接地址必填")
    private String dataSourceUrl;
    /**
     * 数据库用户名
     */
    @NotBlank(message = "数据库用户名必填")
    private String dataSourceUserName;
    /**
     * 数据库密码
     */
    @NotBlank(message = "数据库密码必填")
    private String dataSourcePassword;
    /**
     * 自动生成表名集合
     */
    @NotNull(message = "表名不能为空")
    @Size(min = 1, message = "表名集合至少包含一个元素")
    private List<String> tables;
    /**
     * 作者
     */
    @NotBlank(message = "作者必填")
    private String author;
    /**
     * 逻辑删除字段名
     */
    @NotBlank(message = "逻辑删除字段名必填")
    private String deleteColumnName;
    /**
     * 乐观锁字段名
     */
    private String versionColumnName;
}


3.编写service代码


import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.soboot.gen.domain.vo.GeneratorVO;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
/**
 * @Author liuy
 * @Description mybatis-plus generator自动生成代码服务
 * @Date 2022/01/19 10:08
 * @Version 1.0
 */
@Service("generatorService")
public class GeneratorService {
    /**
     * 数据源配置
     */
    private DataSourceConfig dataSourceConfig(String url, String username, String password) {
        return new DataSourceConfig.Builder(url, username, password).build();
    }
    /**
     * 策略配置
     */
    private StrategyConfig.Builder strategyConfig(String deleteColumn, String versionColumn, List<String> tables) {
        StrategyConfig.Builder strategyConfig = new StrategyConfig.Builder().addInclude(tables);
        strategyConfig.entityBuilder().enableLombok().formatFileName("%s")
                .mapperBuilder().formatMapperFileName("%sMapper").formatXmlFileName("%sMapperXml")
                .controllerBuilder().enableRestStyle().formatFileName("%sAction")
                .serviceBuilder().formatServiceFileName("%sService").formatServiceImplFileName("%sService")
                //逻辑删除字段 和 默认乐观锁字段
                .entityBuilder().logicDeleteColumnName(deleteColumn).versionColumnName(versionColumn);
        return strategyConfig; // 设置需要生成的表名
    }
    /**
     * 全局配置
     */
    private GlobalConfig.Builder globalConfig(String author) {
        GlobalConfig.Builder globalConfig = new GlobalConfig.Builder().fileOverride();
        globalConfig.author(author)               //作者
                .outputDir("D://generator")    //输出路径(写到java目录)
                .commentDate("yyyy-MM-dd")
                .fileOverride();            //开启覆盖之前生成的文件
        return globalConfig;
    }
    /**
     * 包配置
     */
    private PackageConfig.Builder packageConfig() {
        PackageConfig.Builder packageConfig = new PackageConfig.Builder();
        packageConfig.parent("com")
                //父包模块名
                .moduleName("soboot")
                .entity("entity")
                .service("service")
                .serviceImpl("serviceImpl")
                .controller("controller")
                .mapper("mapper")
                .xml("mapper")
                //默认生成路径 D盘
                .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://"));
        return packageConfig;
    }
    /**
     * 模板配置
     */
    private TemplateConfig.Builder templateConfig() {
        TemplateConfig.Builder templateConfig = new TemplateConfig.Builder();
        templateConfig
                //自定义service模板
                .serviceImpl("/template/template.java");
        return templateConfig;
    }
    /**
     * 注入配置
     */
    private InjectionConfig.Builder injectionConfig() {
        // 测试自定义输出文件之前注入操作,该操作再执行生成代码前 debug 查看
        return new InjectionConfig.Builder().beforeOutputFile((tableInfo, objectMap) -> {
            System.out.println("tableInfo: " + tableInfo.getEntityName() + " objectMap: " + objectMap.size());
        });
    }
    /**
     * 基础代码生成
     * @param generatorVO
     */
    public void generatorBase(GeneratorVO generatorVO) {
        AutoGenerator generator = new AutoGenerator(dataSourceConfig(generatorVO.getDataSourceUrl(), generatorVO.getDataSourceUserName(), generatorVO.getDataSourcePassword()));
        generator.strategy(strategyConfig(generatorVO.getDeleteColumnName(), generatorVO.getVersionColumnName(), generatorVO.getTables()).build());
        generator.injection(injectionConfig().build());
        generator.template(templateConfig()
                .build());
        generator.global(globalConfig(generatorVO.getAuthor()).build());
        generator.execute();
    }
}

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

0.png


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

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


00.png


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


000.png


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

template.java.vm

package ${package.ServiceImpl};
import ${package.Entity}.${entity};
import ${package.Mapper}.${table.mapperName};
import org.springframework.stereotype.Service;
import com.soboot.common.core.com.soboot.dict.service.AbstractService;
/**
* <p>
 * $!{table.comment} 服务
 * </p>
*
* @author ${author}
* @since ${date}
*/
@Service
#if(${kotlin})
open class ${table.serviceImplName} : ${superServiceImplClass}<${table.mapperName}, ${entity}>(), ${table.serviceName} {
}
#else
public class ${table.serviceImplName}  extends AbstractService<${table.mapperName}, ${entity}> {
}
#end


AbstractService.java

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
/**
 * 基础服务类
 *
 * @param <T>   实体
 * @param <M>   mapper
 * @author liuy
 * @version 1.0
 * @date 2021-10-13 09:48:46
 */
public abstract class AbstractService<M extends BaseMapper<T>,T> extends ServiceImpl<M, T> implements IService<T> {
    @Autowired
    @SuppressWarnings("all")
    protected M mapper;
}


4.编写controller测试


import com.soboot.gen.domain.vo.GeneratorVO;
import com.soboot.gen.service.GeneratorService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * 代码生成 操作处理
 * 
 * @author liuy
 */
@RequestMapping("/gen")
@RestController
public class GenController
{
    @Autowired
    private GeneratorService generatorService;
    /**
     * 基础代码生成
     * @param generatorVO 参数vo
     */
    @PostMapping("/baseGen")
    public void generatorBase(@RequestBody @Validated GeneratorVO generatorVO) {
        generatorService.generatorBase(generatorVO);
    }
}


5.请求接口


000000.png


6.查看生成的目录


0000.png

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


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


00000.png


有兴趣可以看看MybatisPlus Generator源码

MybatisPlus Generator源码地址

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


祝大家生活愉快!!!

相关文章
|
29天前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
209 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
14天前
|
druid Java Maven
|
21天前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
34 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
21天前
|
Java Maven Spring
springboot学习一:idea社区版本创建springboot项目的三种方式(第三种为主)
这篇文章介绍了在IntelliJ IDEA社区版中创建Spring Boot项目的三种方法,特别强调了第三种方法的详细步骤。
102 0
springboot学习一:idea社区版本创建springboot项目的三种方式(第三种为主)
|
23天前
|
Java 数据库连接 API
springBoot:后端解决跨域&Mybatis-Plus&SwaggerUI&代码生成器 (四)
本文介绍了后端解决跨域问题的方法及Mybatis-Plus的配置与使用。首先通过创建`CorsConfig`类并设置相关参数来实现跨域请求处理。接着,详细描述了如何引入Mybatis-Plus插件,包括配置`MybatisPlusConfig`类、定义Mapper接口以及Service层。此外,还展示了如何配置分页查询功能,并引入SwaggerUI进行API文档生成。最后,提供了代码生成器的配置示例,帮助快速生成项目所需的基础代码。
|
30天前
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
34 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
30天前
|
Java 数据库连接 mybatis
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
该文档详细介绍了如何在Springboot Web项目中整合Mybatis,包括添加依赖、使用`@MapperScan`注解配置包扫描路径等步骤。若未使用`@MapperScan`,系统会自动扫描加了`@Mapper`注解的接口;若使用了`@MapperScan`,则按指定路径扫描。文档还深入分析了相关源码,解释了不同情况下的扫描逻辑与优先级,帮助理解Mybatis在Springboot项目中的自动配置机制。
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
|
18天前
|
Java Maven Spring
查看springboot版本支持最高的java版本
截至最近更新,Spring Boot 3.0及以上版本支持的最高Java版本为Java 17。鉴于技术的不断演进,建议直接参考Spring Boot的官方文档获取最准确的支持信息,因为这些版本兼容性可能会随着新版本的发布而有所变化。选择与你的Spring Boot版本相匹配的Java版本,可以确保充分利用框架特性,同时保证项目的稳定性和前瞻性。
34 0
|
2月前
|
XML Java 关系型数据库
springboot 集成 mybatis-plus 代码生成器
本文介绍了如何在Spring Boot项目中集成MyBatis-Plus代码生成器,包括导入相关依赖坐标、配置快速代码生成器以及自定义代码生成器模板的步骤和代码示例,旨在提高开发效率,快速生成Entity、Mapper、Mapper XML、Service、Controller等代码。
springboot 集成 mybatis-plus 代码生成器
|
25天前
|
Java 数据库连接 Maven
Spring整合Mybatis
Spring整合Mybatis