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

2023-05-16

1.导入Maven

2.编写GeneratorVO

3.编写service代码

4.编写controller测试

5.请求接口

6.查看生成的目录


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

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

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

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

我这里只改了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.请求接口

6.查看生成的目录

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

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

有兴趣可以看看MybatisPlus Generator源码

MybatisPlus Generator源码地址

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

祝大家生活愉快!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(2022最新版本)SpringBoot 整合 MyBatis Plus 代码生成器 的相关文章

随机推荐