MyBatis-Plus (MBP) 代码生成器是一个强大且高效的工具,旨在自动化创建与数据库表结构相对应的一系列 Java 类和配置文件,显著减少在项目开发初期以及后期数据库变更时的手动编码工作。它利用数据库元数据信息(如表名、字段名、数据类型等)来生成符合 MyBatis-Plus 使用规范的实体类(Entity)、Mapper 接口、Mapper XML 映射文件、Service 层接口与实现类、以及 Controller 层代码。这样,开发者可以快速建立起基于 MyBatis-Plus 的持久层架构,专注于业务逻辑的实现,极大地提升了开发效率和代码一致性。
导入依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.1</version> </dependency>
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.5.1</version> </dependency>
<dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity</artifactId> <version>1.7</version> </dependency>
|
生成工具类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| import com.baomidou.mybatisplus.generator.FastAutoGenerator; import com.baomidou.mybatisplus.generator.config.OutputFile; import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.Collections;
public class CodeGenerator { public static void main(String[] args) { generate(); } private static void generate(){ FastAutoGenerator.create("jdbc:mysql://localhost:3306/back", "root", "123456") .globalConfig(builder -> { builder.author("plume") .enableSwagger() .fileOverride() .outputDir("E:\\src\\main\\java\\"); }) .packageConfig(builder -> { builder.parent("com.example.management") .moduleName(null) .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "E:\\plume\\src\\main\\resources\\mapper\\")); }) .strategyConfig(builder -> { builder.entityBuilder().enableLombok(); builder.controllerBuilder().enableHyphenStyle() .enableRestStyle(); builder.addInclude("sys_role")
.addTablePrefix("t_", "sys_"); })
.execute(); }
}
|
模板配置
可以在 mybatis-plus-generator 包中的 template 找到基础模板进行修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| package ${package.Controller};
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.qingge.springboot.common.Result;
import ${package.Service}.${table.serviceName}; import ${package.Entity}.${entity};
#if(${restControllerStyle}) import org.springframework.web.bind.annotation.RestController; #else import org.springframework.stereotype.Controller; #end #if(${superControllerClassPackage}) import ${superControllerClassPackage}; #end
#if(${restControllerStyle}) @RestController #else @Controller #end @RequestMapping("#if(${package.ModuleName})/${package.ModuleName}#end/#if(${controllerMappingHyphenStyle})${controllerMappingHyphen}#else${table.entityPath}#end") #if(${kotlin}) class ${table.controllerName}#if(${superControllerClass}) : ${superControllerClass}()#end
#else #if(${superControllerClass}) public class ${table.controllerName} extends ${superControllerClass} { #else public class ${table.controllerName} { #end
@Resource private ${table.serviceName} ${table.entityPath}Service;
@PostMapping public Result save(@RequestBody ${entity} ${table.entityPath}) { ${table.entityPath}Service.saveOrUpdate(${table.entityPath}); return Result.success(); }
@DeleteMapping("/{id}") public Result delete(@PathVariable Integer id) { ${table.entityPath}Service.removeById(id); return Result.success(); }
@PostMapping("/del/batch") public Result deleteBatch(@RequestBody List<Integer> ids) { ${table.entityPath}Service.removeByIds(ids); return Result.success(); }
@GetMapping public Result findAll() { return Result.success(${table.entityPath}Service.list()); }
@GetMapping("/{id}") public Result findOne(@PathVariable Integer id) { return Result.success(${table.entityPath}Service.getById(id)); }
@GetMapping("/page") public Result findPage(@RequestParam Integer pageNum, @RequestParam Integer pageSize) { QueryWrapper<${entity}> queryWrapper = new QueryWrapper<>(); queryWrapper.orderByDesc("id"); return Result.success(${table.entityPath}Service.page(new Page<>(pageNum, pageSize), queryWrapper)); }
}
#end
|