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(使用前将#替换为@)