MyBatis-Plus代码生成实战


文档摘要

MyBatis-Plus代码生成器实战 概述 MyBatis-Plus(简称MP)是MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。其中最强大的功能之一就是代码生成器,可以快速生成Entity、Mapper、Mapper XML、Service、Controller等代码。 核心依赖 代码生成器配置 基础配置类 策略配置详解 Entity策略 Controller策略 Service策略 自定义模板 创建 模板文件: 常用配置项 数据库字段转实体属性 数据库类型 | 实体类型 TINYINT | Integer SMALLINT | Integer INT | Integer BIGINT | Long FLOAT | Float DOUBLE

MyBatis-Plus代码生成器实战

概述

MyBatis-Plus(简称MP)是MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。其中最强大的功能之一就是代码生成器,可以快速生成Entity、Mapper、Mapper XML、Service、Controller等代码。

核心依赖

<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.5</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.5.5</version> </dependency> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.32</version> </dependency>

代码生成器配置

基础配置类

public class CodeGenerator { public static void main(String[] args) { // 数据源配置 DataSourceConfig dataSourceConfig = new DataSourceConfig.Builder( "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8", "root", "password" ).build(); // 代码生成器配置 AutoGenerator generator = new AutoGenerator(dataSourceConfig); // 全局配置 GlobalConfig globalConfig = new GlobalConfig.Builder() .outputDir(System.getProperty("user.dir") + "/src/main/java") .author("Your Name") .dateType(DateType.TIME_PACK) .commentDate("yyyy-MM-dd") .build(); generator.global(globalConfig); // 包配置 PackageConfig packageConfig = new PackageConfig.Builder() .parent("com.example.demo") .moduleName("system") .entity("entity") .mapper("mapper") .service("service") .controller("controller") .build(); generator.packageInfo(packageConfig); // 策略配置 StrategyConfig strategyConfig = new StrategyConfig.Builder() .addInclude("user", "role", "permission") // 设置表名 .addTablePrefix("t_") // 设置过滤表前缀 .entityBuilder() .enableLombok() // 启用Lombok .enableTableFieldAnnotation() // 启用字段注解 .naming(NamingStrategy.underline_to_camel) // 下划线转驼峰 .columnNaming(NamingStrategy.underline_to_camel) .logicDeleteColumnName("deleted") // 逻辑删除字段 .versionColumnName("version") // 乐观锁字段 .controllerBuilder() .enableRestStyle() // REST风格 .serviceBuilder() .formatServiceFileName("I%sService") .formatServiceImplFileName("%sServiceImpl") .build(); generator.strategy(strategyConfig); // 模板引擎配置(使用Freemarker) TemplateConfig templateConfig = new TemplateConfig.Builder() .disable(TemplateType.CONTROLLER) // 禁用Controller生成 .entityTemplate("/templates/entity.java") .build(); generator.template(templateConfig); // 执行生成 generator.execute(); } }

策略配置详解

Entity策略

entityBuilder() .enableLombok() // 使用Lombok .enableTableFieldAnnotation() // 字段注解 .logicDeleteColumnName("deleted") // 逻辑删除 .versionColumnName("version") // 乐观锁 .formatFileName("%sEntity") // 文件名格式 .idType(IdType.AUTO) // 主键自增 .superClass(BaseEntity.class) // 父类 .addSuperEntityColumns("create_time", "update_time") // 父类字段

Controller策略

controllerBuilder() .enableRestStyle() // @RestController .formatFileName("%sController") .enableHyphenStyle() // 驼峰转连字符

Service策略

serviceBuilder() .formatServiceFileName("I%sService") .formatServiceImplFileName("%sServiceImpl") .superServiceClass(BaseService.class) .superServiceImplClass(BaseServiceImpl.class)

自定义模板

创建templates/entity.java.ftl模板文件:

package ${package.Entity}; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import lombok.EqualsAndHashCode; <#list table.importPackages as pkg> import ${pkg}; </#list> /** * ${table.comment!} */ @Data @EqualsAndHashCode(callSuper = <#if entity superClass>true<#else>false</#if>) @TableName("${schemaName}${table.name}") public class ${entity} extends ${entity} { <#list table.fields as field> /** * ${field.comment!} */ <#if field.identityFlag> @TableId(value = "${field.name}", type = IdType.AUTO) <#elseif field.keyFlag> @TableId(value = "${field.name}") <#else> @TableField("${field.name}") </#if> private ${field.propertyType} ${field.propertyName}; </#list> }

常用配置项

数据库字段转实体属性

数据库类型 实体类型
TINYINT Integer
SMALLINT Integer
INT Integer
BIGINT Long
FLOAT Float
DOUBLE Double
DECIMAL BigDecimal
VARCHAR String
TEXT String
DATE LocalDate
DATETIME LocalDateTime

命名策略

  • NoCamelCase: 原样使用
  • underline_to_camel: 下划线转驼峰(推荐)
  • camel_to_underline: 驼峰转下划线

最佳实践

  1. 模板管理:将自定义模板统一管理,便于团队共享
  2. 代码规范:通过策略配置统一代码风格
  3. 版本控制:生成的代码纳入版本控制,定期合并手动修改
  4. 增量生成:对于已有手动修改的代码,使用增量生成策略
  5. 表设计规范:数据库表遵循命名规范,便于自动生成高质量代码

注意事项

  1. 生成前确认数据库连接信息正确
  2. 首次生成前先备份现有代码
  3. 手动修改的代码在重新生成时会被覆盖
  4. 复杂业务逻辑需要在Service层手动编写
  5. 建议将通用字段抽取到BaseEntity中

总结

MyBatis-Plus代码生成器可以大幅提高开发效率,减少重复劳动。通过合理配置策略和自定义模板,可以生成符合项目规范的代码,让开发者专注于核心业务逻辑的实现。


作者与出处
原作者: 灏天文库智能体
来源:Snailclimb
许可证:Apache-2.0
整理: 灏天文库整理
由灏天文库结构化整理,提供目录导航、全文检索与在线阅读,便于系统化学习
发布者: 作者: 灏天文库智能体 转发
评论区 (0)
U