一、引入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>最新版本</version>
</dependency>
备注:这里mybatis-plus-generator
的最新版本是3.5.2。
使用
快速生成
FastAutoGenerator.create("url", "username", "password")
.globalConfig(builder -> {
builder.author("baomidou") // 设置作者
.enableSwagger() // 开启 swagger 模式
.fileOverride() // 覆盖已生成文件
.outputDir("D://"); // 指定输出目录
})
.packageConfig(builder -> {
builder.parent("com.baomidou.mybatisplus.samples.generator") // 设置父包名
.moduleName("system") // 设置父包模块名
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://")); // 设置mapperXml生成路径
})
.strategyConfig(builder -> {
builder.addInclude("t_simple") // 设置需要生成的表名
.addTablePrefix("t_", "c_"); // 设置过滤表前缀
})
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
交互式生成
FastAutoGenerator.create(DATA_SOURCE_CONFIG)
// 全局配置
.globalConfig((scanner, builder) -> builder.author(scanner.apply("请输入作者名称?")).fileOverride())
// 包配置
.packageConfig((scanner, builder) -> builder.parent(scanner.apply("请输入包名?")))
// 策略配置
.strategyConfig((scanner, builder) -> builder.addInclude(getTables(scanner.apply("请输入表名,多个英文逗号分隔?所有输入 all")))
.controllerBuilder().enableRestStyle().enableHyphenStyle()
.entityBuilder().enableLombok().addTableFills(
new Column("create_time", FieldFill.INSERT)
).build())
/*
模板引擎配置,默认 Velocity 可选模板引擎 Beetl 或 Freemarker
.templateEngine(new BeetlTemplateEngine())
.templateEngine(new FreemarkerTemplateEngine())
*/
.execute();
// 处理 all 情况
protected static List<String> getTables(String tables) {
return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
}
代码示例:
public class MybatisPlusCodeAutoGeneration {
private static final String URL = "jdbc:mysql://localhost:3306/hdg";
private static final String USERNAME = "root";
private static final String PASSWORD = "vagrant";
/**
* 自动生成代码输出目录,这里默认类路径下的src/test/java/com/universe包下,即当前工程的test目录下。
*/
private static final String OUTPUT_DIR = System.getProperty("user.dir") + File.separator + "src/test/java/com/universe";
public static void main(String[] args) {
FastAutoGenerator.create(URL, USERNAME, PASSWORD)
// 开启fileOverrride重新旧文件,disableOpenDir禁用代码生成后打开输出目录对话框
.globalConfig(builder -> builder.author("liuyalou").fileOverride().disableOpenDir().outputDir(OUTPUT_DIR))
// parent指定生成的代码在哪个包下,entity可以指定实体(DO)所在的包名
.packageConfig(builder -> builder.parent("com.universe").entity("pojo.domain"))
// addInclude指定包含的表名,不调用该方法默认为所有表生成代码;addTablePrefix可以过滤表前缀,即t_user变成user
.strategyConfig(builder -> builder.addInclude("t_user").addTablePrefix("t_")
// 禁用为实体类生成序列化ID;formatFileName格式化生成的实体类名称,即t_user -> UserDO
.entityBuilder().disableSerialVersionUID().formatFileName("%sDO")
// formatMapperFileName格式化Mapper接口名称,即t_user -> UserMapper
// formatXmlFileName格式化Mapper.xml文件名称,即t_user -> UserMapper.xml
.mapperBuilder().formatMapperFileName("%sMapper").formatXmlFileName("%sMapper")
.build()
)
// MyBatis-Plus代码生成器是通过模板引擎来渲染文件的,默认模板引擎是Velocity,根据依赖我们使用Freemarker
.templateEngine(new FreemarkerTemplateEngine())
.execute();
}
}