文章目录
- 一、前言
- 二、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 支持多种模板引擎,开发者可以根据自己的偏好选择合适的模板引擎来生成代码。
- 灵活的配置: 生成器提供了丰富的配置选项,可以根据项目需求进行灵活的配置,包括表名、字段名的映射规则、生成的文件路径等。
- 支持自定义扩展: 除了自动生成基本的代码外,开发者还可以通过编写插件来扩展生成器的功能,满足特定的项目需求。