(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自动生成工具就此整合完成


祝大家生活愉快!!!

相关文章
|
3天前
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
1月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
105 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
1月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
52 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
1月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
288 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
1月前
|
SQL Java 数据库连接
mybatis使用二:springboot 整合 mybatis,创建开发环境
这篇文章介绍了如何在SpringBoot项目中整合Mybatis和MybatisGenerator,包括添加依赖、配置数据源、修改启动主类、编写Java代码,以及使用Postman进行接口测试。
16 0
mybatis使用二:springboot 整合 mybatis,创建开发环境
|
1月前
|
Java 数据库连接 API
springBoot:后端解决跨域&Mybatis-Plus&SwaggerUI&代码生成器 (四)
本文介绍了后端解决跨域问题的方法及Mybatis-Plus的配置与使用。首先通过创建`CorsConfig`类并设置相关参数来实现跨域请求处理。接着,详细描述了如何引入Mybatis-Plus插件,包括配置`MybatisPlusConfig`类、定义Mapper接口以及Service层。此外,还展示了如何配置分页查询功能,并引入SwaggerUI进行API文档生成。最后,提供了代码生成器的配置示例,帮助快速生成项目所需的基础代码。
|
Java Maven
Springboot 集成 MybatisPlus
Springboot 集成 MybatisPlus
209 0
|
Java 应用服务中间件 Maven
传统maven项目和现在spring boot项目的区别
Spring Boot:传统 Web 项目与采用 Spring Boot 项目区别
489 0
传统maven项目和现在spring boot项目的区别
|
XML Java 数据库连接
创建springboot项目的基本流程——以宠物类别为例
创建springboot项目的基本流程——以宠物类别为例
153 0
创建springboot项目的基本流程——以宠物类别为例
|
存储 机器学习/深度学习 IDE
SpringBoot 项目与被开发快速迁移|学习笔记
快速学习 SpringBoot 项目与被开发快速迁移
SpringBoot 项目与被开发快速迁移|学习笔记