正文
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自动生成工具就此整合完成
祝大家生活愉快!!!