文章目录
- 一、前言
- 二、MybatisPlus代码生成器
- 1、引入依赖
- 2、编写生成代码
- 3、配置说明
- 3.1、全局配置(GlobalConfig)
- 3.2、包配置(PackageConfig)
- 3.3、模板配置(TemplateConfig)
- 3.4、策略配置(StrategyConfig)
- 3.4.1、Entity 策略配置
- 3.4.2、Controller 策略配置
- 3.4.3、Service 策略配置
- 4、示例演示
- 4.1、进行代码生成:
- 4.2、生成结果
- 三、总结
一、前言
本文将详细介绍mybatisplus-generator的相关使用,mybatisplus-generator是 MyBatis Plus 框架中的一个代码生成工具,它能够自动生成与数据库表对应的 Java 实体类、Mapper 接口以及 XML 配置文件。它的出现极大地提高了开发效率,让开发者能够将更多的精力集中在业务逻辑上,而不是繁琐的 CRUD 操作上。
二、MybatisPlus代码生成器
使用mybatisplus-generator可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。
1、引入依赖
博客这里使用的是.vm模板引擎,所以需要手动引入velocity的依赖;
<!-- velocity -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.1</version>
</dependency>
2、编写生成代码
以下是mybatisplus官方提供的可交互是的代码生成的例子:
public class MyBatisPlusGenerator {
// 处理 all 情况
protected static List<String> getTables(String tables) {
return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
}
public static void main(String[] args) {
FastAutoGenerator.create("jdbc:mysql://localhost:3306/mengjie", "root", "123456")
// 全局配置
.globalConfig((scanner, builder) -> {
builder.author(scanner.apply("请输入作者名称?")).fileOverride();
builder.enableSwagger();
builder.outputDir("E:\\study\\SpringCloud\\mybatisplus\\src\\main\\java");
})
// 包配置
.packageConfig((scanner, builder) -> {
builder.parent(scanner.apply("请输入包名?"));
})
// 策略配置
.strategyConfig((scanner, builder) -> {
builder.addInclude(MyBatisPlusGenerator.getTables(scanner.apply("请输入表名,多个英文逗号分隔?所有输入 all")))
.controllerBuilder().enableRestStyle().enableHyphenStyle().build();
builder.serviceBuilder()
.formatServiceFileName("%sService")
.formatServiceImplFileName("%sServiceImp")
.build();
//entity的策略配置
builder.entityBuilder()
.enableLombok()
.enableTableFieldAnnotation()
.versionColumnName("version")
.logicDeleteColumnName("is_delete")
.columnNaming(NamingStrategy.underline_to_camel)
.idType(IdType.ASSIGN_ID)
.formatFileName("%sEntity")
.build();
})
.execute();
}
}
3、配置说明
3.1、全局配置(GlobalConfig)
new GlobalConfig.Builder()
.fileOverride()
.outputDir("")//输出目录
.author("wmj")
.enableKotlin()
.enableSwagger()
.dateType(DateType.TIME_PACK)
.commentDate("yyyy-MM-dd")
.build();
3.2、包配置(PackageConfig)
new PackageConfig.Builder()
.moduleName("sys")
.entity("po")
.service("service")
.serviceImpl("service.impl")
.mapper("mapper")
.xml("mapper.xml")
.controller("controller")
.other("other")
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://"))
.build();
3.3、模板配置(TemplateConfig)
new TemplateConfig.Builder()
.disable(TemplateType.ENTITY)
.entity("/templates/entity.java")
.service("/templates/service.java")
.serviceImpl("/templates/serviceImpl.java")
.mapper("/templates/mapper.java")
.mapperXml("/templates/mapper.xml")
.controller("/templates/controller.java")
.build();
3.4、策略配置(StrategyConfig)
new StrategyConfig.Builder()
.enableCapitalMode()
.enableSkipView()
.disableSqlFilter()
.likeTable(new LikeTable("USER"))
.addInclude("t_simple")
.addTablePrefix("t_", "c_")
.addFieldSuffix("_flag")
.build();
3.4.1、Entity 策略配置
new StrategyConfig.Builder()
.entityBuilder()
.superClass(BaseEntity.class)
.disableSerialVersionUID()
.enableChainModel()
.enableLombok()
.enableRemoveIsPrefix()
.enableTableFieldAnnotation()
.enableActiveRecord()
.versionColumnName("version")
//.versionPropertyName("version")
.logicDeleteColumnName("deleted")
//.logicDeletePropertyName("deleteFlag")
.naming(NamingStrategy.no_change)
.columnNaming(NamingStrategy.underline_to_camel)
.addSuperEntityColumns("id", "created_by", "created_time", "updated_by", "updated_time")
.addIgnoreColumns("age")
.addTableFills(new Column("create_time", FieldFill.INSERT))
.addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE))
.idType(IdType.AUTO)
.formatFileName("%sEntity")
.build();
3.4.2、Controller 策略配置
new StrategyConfig.Builder()
.controllerBuilder()
.superClass(BaseController.class)
.enableHyphenStyle()
.enableRestStyle()
.formatFileName("%sAction")
.build();
3.4.3、Service 策略配置
new StrategyConfig.Builder()
.serviceBuilder()
.superServiceClass(BaseService.class)
.superServiceImplClass(BaseServiceImpl.class)
.formatServiceFileName("%sService")
.formatServiceImplFileName("%sServiceImp")
.build();
4、示例演示
生成前的目录结构:
4.1、进行代码生成:
这里我们可以选择指定表生成也可以直接选择所有表生成;
4.2、生成结果
可以看到生成后的项目结构:
三、总结
- 提高开发效率: MyBatis Plus Generator 可以根据数据库表结构自动生成大部分的代码,从而减少了开发人员手动编写重复性代码的工作量,提高了开发效率。
- 代码一致性: 自动生成的代码保证了实体类、Mapper 接口和 XML 配置文件之间的一致性,避免了由于手动编写而引入的错误。
- 易于维护: 由于代码是自动生成的,所以当数据库表结构发生变化时,只需重新运行生成器即可更新代码,减少了手动修改代码的工作。
- 支持多种模板引擎: MyBatis Plus Generator 支持多种模板引擎,开发者可以根据自己的偏好选择合适的模板引擎来生成代码。
- 灵活的配置: 生成器提供了丰富的配置选项,可以根据项目需求进行灵活的配置,包括表名、字段名的映射规则、生成的文件路径等。
- 支持自定义扩展: 除了自动生成基本的代码外,开发者还可以通过编写插件来扩展生成器的功能,满足特定的项目需求。