当前位置: 首页 > news >正文

MyBatis-Plus代码生成器

MyBatis-Plus 代码生成器

MyBatis-Plus 提供了一个强大的 代码生成器,可以根据数据库表结构自动生成对应的实体类、Mapper 接口、Mapper XML 文件、Service 和 Controller 等代码。它极大地提高了开发效率,减少了手动编写基础代码的工作量。通过配置代码生成器,开发者可以快速生成项目中常用的 CRUD 代码,并且可以自定义生成策略,灵活调整生成的代码结构。

1. 什么是 MyBatis-Plus 代码生成器?

MyBatis-Plus 代码生成器基于模板引擎,可以自动生成以下内容:

  • 实体类:对应数据库表的 Java 实体类。
  • Mapper 接口:用于数据库访问的 Mapper 接口。
  • Mapper XML:与 Mapper 接口对应的 SQL 映射文件(可选)。
  • Service 和 ServiceImpl:业务逻辑层的接口和实现类。
  • Controller:处理 HTTP 请求的控制层代码(可选)。

通过代码生成器,开发者只需要配置好数据库连接和表名等信息,即可自动生成一套基础的代码结构,节省大量重复性工作。

2. 引入代码生成器依赖

首先,在 pom.xml 中引入 MyBatis-Plus 代码生成器的依赖:

<dependencies><!-- MyBatis-Plus 代码生成器 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.3</version></dependency><!-- 模板引擎(Freemarker 或 Velocity)--><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.3</version></dependency><!-- MySQL 驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.31</version></dependency>
</dependencies>
  • mybatis-plus-generator:MyBatis-Plus 代码生成器的核心依赖。
  • velocity-engine-core:使用 Velocity 作为模板引擎,也可以选择 Freemarker 等其他模板引擎。
  • mysql-connector-java:数据库驱动,具体数据库类型根据实际情况选择。

3. 基本代码生成器配置

MyBatis-Plus 代码生成器的核心配置通常通过 Java 代码实现,下面是一个简单的代码生成器配置示例。

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;public class CodeGenerator {public static void main(String[] args) {// 1. 创建代码生成器AutoGenerator generator = new AutoGenerator();// 2. 全局配置GlobalConfig globalConfig = new GlobalConfig();String projectPath = System.getProperty("user.dir");  // 项目路径globalConfig.setOutputDir(projectPath + "/src/main/java");  // 输出目录globalConfig.setAuthor("Your Name");  // 作者globalConfig.setOpen(false);  // 生成后是否打开资源管理器globalConfig.setSwagger2(true);  // 开启 Swagger2 注解globalConfig.setServiceName("%sService");  // 去掉 Service 接口的首字母 Igenerator.setGlobalConfig(globalConfig);// 3. 数据源配置DataSourceConfig dataSourceConfig = new DataSourceConfig();dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai");dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");dataSourceConfig.setUsername("root");dataSourceConfig.setPassword("yourpassword");dataSourceConfig.setDbType(DbType.MYSQL);generator.setDataSource(dataSourceConfig);// 4. 包配置PackageConfig packageConfig = new PackageConfig();packageConfig.setParent("com.example.demo");  // 父包名packageConfig.setModuleName("user");  // 模块名generator.setPackageInfo(packageConfig);// 5. 策略配置StrategyConfig strategyConfig = new StrategyConfig();strategyConfig.setNaming(NamingStrategy.underline_to_camel);  // 表名生成策略strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);  // 字段名生成策略strategyConfig.setEntityLombokModel(true);  // 自动生成 Lombok 注解strategyConfig.setRestControllerStyle(true);  // 生成 Rest 风格的 ControllerstrategyConfig.setInclude("user");  // 需要生成的表名(多个表可以使用逗号分隔)strategyConfig.setControllerMappingHyphenStyle(true);  // URL 中驼峰转连字符generator.setStrategy(strategyConfig);// 6. 配置模板引擎generator.setTemplateEngine(new VelocityTemplateEngine());// 7. 执行生成操作generator.execute();}
}

在这个示例中,我们进行了以下配置:

  1. 全局配置 (GlobalConfig)

    • 设置代码生成的输出目录、作者信息。
    • 指定是否生成 Swagger2 注解(适用于生成 REST API 文档)。
    • 自定义 Service 接口的命名规则,去掉默认的 I 前缀。
  2. 数据源配置 (DataSourceConfig)

    • 配置数据库连接的 URL、驱动、用户名和密码。
  3. 包配置 (PackageConfig)

    • 设置生成代码的包结构,parent 用于定义顶层包名,moduleName 定义模块名。
  4. 策略配置 (StrategyConfig)

    • 配置表和字段的命名规则(下划线转驼峰)。
    • 生成 Lombok 注解,减少 gettersetter 方法的编写。
    • 配置生成的 Controller 使用 REST 风格。
  5. 模板引擎 (VelocityTemplateEngine)

    • 使用 Velocity 作为模板引擎,负责生成对应的代码文件。

4. 代码生成器的高级配置

MyBatis-Plus 的代码生成器非常灵活,支持多种自定义配置。下面介绍一些常见的高级配置选项。

4.1 自定义文件输出路径

可以通过 GlobalConfig.setOutputDir() 方法指定代码生成的输出路径。例如,将不同的文件生成到不同的目录下:

globalConfig.setOutputDir(projectPath + "/src/main/java");  // 默认输出到 src/main/java
4.2 忽略表前缀

在一些项目中,数据库表往往会有统一的前缀(如 t_ 表示表),代码生成器可以忽略这些前缀,以便生成的实体类更符合命名规范:

strategyConfig.setTablePrefix("t_");  // 忽略表前缀 t_
4.3 实体类字段的自动填充

对于数据库中的 create_timeupdate_time 等字段,通常需要在插入或更新时自动填充。MyBatis-Plus 代码生成器支持自动填充配置:

strategyConfig.setEntityTableFieldAnnotationEnable(true);  // 开启实体类字段注解

并在实体类的字段上添加 @TableField 注解:

@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
4.4 自定义模板路径

如果需要修改生成的代码模板,可以自定义模板路径。MyBatis-Plus 允许通过设置自定义模板路径来覆盖默认模板:

TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setEntity("/templates/entity.java");  // 自定义实体类模板
generator.setTemplate(templateConfig);

自定义模板文件可以放置在 resources/templates 目录下,并根据需求修改内容。

4.5 生成 Controller、Service、Mapper 等代码

MyBatis-Plus 代码生成器可以生成包括实体类、Mapper 接口、Service 和 Controller 等多种代码。通过 PackageConfigStrategyConfig 可以选择需要生成的代码类型。

packageConfig.setController("controller");  // Controller 包名
packageConfig.setService("service");        // Service 包名
packageConfig.setMapper("mapper");          // Mapper 包名

如果不想生成某些代码(如 XML 映射文件),可以通过禁用模板来实现:


java
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setXml(null);  // 禁止生成 XML 映射文件
generator.setTemplate(templateConfig);

5. 代码生成后的目录结构

执行代码生成器后,MyBatis-Plus 会根据配置生成对应的代码文件,常见的目录结构如下:

src└── main└── java└── com└── example└── demo├── controller│   └── UserController.java├── entity│   └── User.java├── mapper│   └── UserMapper.java├── service│   ├── UserService.java│   └── impl│       └── UserServiceImpl.java└── xml└── UserMapper.xml
  • controller:包含 REST 风格的控制层代码。
  • entity:实体类文件,映射数据库表。
  • mapper:Mapper 接口文件,定义了数据库操作的接口。
  • serviceservice.impl:业务逻辑层代码。
  • xml:Mapper 对应的 XML 文件(如果开启 XML 生成)。

6. 自定义模板内容

如果想要根据自己的需求修改生成的代码结构或内容,可以通过自定义模板来实现。MyBatis-Plus 使用 Velocity 或 Freemarker 作为模板引擎,可以在 resources/templates 目录下编写自定义模板文件。

例如,自定义实体类模板:

#(entity)
package #if(${packageName})${packageName}.entity#end;import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;@Data
@TableName("${tableName}")
public class ${entityName} {#foreach($field in $fields)/*** ${field.comment}*/@TableIdprivate ${field.type} ${field.name};#end
}

然后在代码生成器配置中指定自定义模板路径:

TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setEntity("/templates/custom_entity.java");  // 使用自定义的实体类模板
generator.setTemplate(templateConfig);

结论

MyBatis-Plus 的代码生成器是一个非常强大的工具,通过简单的配置,开发者可以快速生成项目所需的基础代码,包括实体类、Mapper、Service 和 Controller 等。它极大地提高了开发效率,特别适合数据模型复杂的项目。通过灵活的配置选项和模板自定义,开发者可以根据项目需求生成符合自己风格的代码结构,从而专注于业务逻辑的开发。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Microsoft Edge 五个好用的插件
  • Flyway 校验机制
  • C# Winform调用控制台程序(通过Process类)
  • 使用build_chain.sh离线搭建匹配的区块链,并通过命令配置各群组节点的MySQL数据库
  • Java语言程序设计基础篇_编程练习题**18.30 (找出单词)
  • 【网络】高级IO——LT和ET
  • 洛谷P8572
  • 1. ZYNQ 2. MPSOC 3. FPGA 4. Vitis 5. 项目
  • 如何用AI论文生成工具撰写一篇高质量的成人教育毕业论文
  • 【AI创作组】Matlab绘图基础之plot函数
  • 机器学习 and 深度学习
  • Python办公自动化教程(003):PDF的加密
  • 【Git使用】删除Github仓库中的指定文件/文件夹
  • FPGA科学高效的编程方法有哪些?
  • 硬件工程师笔试面试——电机
  • “大数据应用场景”之隔壁老王(连载四)
  • 【Leetcode】104. 二叉树的最大深度
  • AWS实战 - 利用IAM对S3做访问控制
  • Fundebug计费标准解释:事件数是如何定义的?
  • JavaWeb(学习笔记二)
  • java中的hashCode
  • js ES6 求数组的交集,并集,还有差集
  • Promise初体验
  • Spring Boot快速入门(一):Hello Spring Boot
  • Travix是如何部署应用程序到Kubernetes上的
  • 高度不固定时垂直居中
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 理清楚Vue的结构
  • 前端临床手札——文件上传
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 微信小程序开发问题汇总
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • $().each和$.each的区别
  • (+4)2.2UML建模图
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (强烈推荐)移动端音视频从零到上手(上)
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (四)Android布局类型(线性布局LinearLayout)
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)Windows2003安全设置/维护
  • (转)德国人的记事本
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .net framework4与其client profile版本的区别
  • .Net MVC + EF搭建学生管理系统
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .net(C#)中String.Format如何使用