MyBatis-Plus 代码生成器是一个自动化工具,用于快速生成 实体类(Entity)、Mapper 接口、Service 层、Controller 层 等代码,减少重复开发工作。通过配置数据库连接和代码风格,可一键生成标准化的 CRUD 代码,显著提升开发效率。
• 官网文档:
• 代码生成器使用教程
• 配置项详解
DataSourceConfig
)DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/payment_demo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("1234");
mpg.setDataSource(dsc);
• 作用:配置数据库连接信息。
• 关键参数:
• url
:数据库连接 URL。
• driverName
:JDBC 驱动类(MySQL 8.0+ 使用 com.mysql.cj.jdbc.Driver
)。
• username
/password
:数据库账号密码。
GlobalConfig
)GlobalConfig gc = new GlobalConfig();
gc.setOutputDir(projectPath + "/src/main/java"); // 代码生成路径
gc.setFileOverride(true); // 覆盖已有文件
gc.setOpen(false); // 生成后不打开目录
gc.setAuthor("tang"); // 作者信息
gc.setDateType(DateType.ONLY_DATE); // 日期类型(ONLY_DATE 表示 java.util.Date)
gc.setServiceName("%sService"); // Service 接口命名规则
gc.setServiceImplName("%sServiceImpl"); // Service 实现类命名规则
gc.setControllerName("%sController"); // Controller 命名规则
gc.setXmlName("%sMapper"); // Mapper XML 文件命名规则
gc.setMapperName("%sMapper"); // Mapper 接口命名规则
gc.setEntityName("%s"); // 实体类命名规则
gc.setIdType(IdType.AUTO); // 主键生成策略(AUTO 表示数据库自增)
mpg.setGlobalConfig(gc);
• 作用:控制全局代码生成行为。
• 关键配置:
• setOutputDir
:生成代码的输出目录(默认项目根目录下的 src/main/java
)。
• setFileOverride
:是否覆盖已存在的文件(建议开发阶段开启)。
• setIdType
:主键生成策略(AUTO
对应数据库自增,ASSIGN_ID
为雪花算法)。
PackageConfig
)PackageConfig pc = new PackageConfig();
pc.setParent("com.tang"); // 父包名
pc.setMapper("mapper"); // Mapper 接口包名
pc.setEntity("pojo"); // 实体类包名
pc.setService("service"); // Service 接口包名
pc.setServiceImpl("service.impl"); // Service 实现类包名
pc.setController("controller"); // Controller 包名
pc.setXml("mapper.xml"); // Mapper XML 文件包名
mpg.setPackageInfo(pc);
• 作用:定义生成的代码文件的包结构。
• 示例:
• 实体类生成路径:com.tang.pojo.User
• Mapper 接口生成路径:com.tang.mapper.UserMapper
StrategyConfig
)StrategyConfig sc = new StrategyConfig();
sc.setNaming(NamingStrategy.underline_to_camel); // 表名转驼峰(user_info → UserInfo)
sc.setColumnNaming(NamingStrategy.underline_to_camel); // 列名转驼峰(user_name → userName)
sc.setEntityLombokModel(true); // 实体类启用 Lombok
sc.setRestControllerStyle(true); // 生成 REST 风格 Controller
sc.setControllerMappingHyphenStyle(true); // URL 驼峰转连字符(userName → user-name)
sc.setLogicDeleteFieldName("deleted"); // 逻辑删除字段名
sc.setVersionFieldName("version"); // 乐观锁字段名
sc.setInclude(scanner("表名,多个英文逗号分割").split(",")); // 指定生成表
mpg.setStrategy(sc);
• 作用:控制代码生成的具体规则和功能。
• 关键配置:
• 命名策略:自动转换数据库下划线命名为 Java 驼峰命名。
• Lombok 支持:生成带有 @Data
、@Getter
/@Setter
注解的实体类。
• REST 风格:生成 @RestController
控制器,默认返回 JSON 数据。
• 逻辑删除:生成 deleted
字段并添加 @TableLogic
注解。
• 乐观锁:生成 version
字段并添加 @Version
注解。
main
方法后,控制台提示输入表名(多个表用逗号分隔)。mpg.execute(); // 执行代码生成
src/main/java
。resources/mapper.xml
)。
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
dependency>
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
<version>3.3.1version>
dependency>
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-generatorartifactId>
<version>3.3.1version>
dependency>
package com.tang.paymentdemo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
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.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import lombok.extern.slf4j.Slf4j;
import org.junit.platform.commons.util.StringUtils;
import java.util.ArrayList;
import java.util.Scanner;
@Slf4j
public class CodeGenerator {
public static String scanner(String tip) {
Scanner scanner = new Scanner(System.in);
StringBuilder help = new StringBuilder();
help.append("请输入" + tip + ":");
System.out.println(help.toString());
if (scanner.hasNext()) {
String ipt = scanner.next();
if (StringUtils.isNotBlank(ipt)) {
return ipt;
}
}
throw new MybatisPlusException("请输入正确的" + tip + "!");
}
public static void main(String[] args) {
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 1.配置数据源:指定数据库类型、连接URL、用户名和密码等。
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/payment_demo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("1234");
mpg.setDataSource(dsc);
// 2. 配置策略:选择需要生成代码的表,设置表名和字段名的命名策略等。
//2.1全局策略配置(globalConfig)
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");//user.dir 返回项目的根目录即包含 pom.xml 或 .idea 的目录
System.out.println("===============================");
log.info("projectPath:" + projectPath);
gc.setOutputDir(projectPath + "/src/main/java");//2.1.1设置代码生成路径,默认值:D盘根目录
System.out.println("================================");
gc.setFileOverride(true);//2.1.2是否覆盖以前文件,默认值false
gc.setOpen(false);//2.1.3是否在生成后自动打开输出目录,默认false
gc.setAuthor("tang");//2.1.4设置作者
gc.setDateType(DateType.ONLY_DATE);//2.1.5设置时间类型
gc.setServiceName("%sService");//2.1.6设置service接口命名规则,%s为占位符
gc.setServiceImplName("%sServiceImpl");//2.1.7设置service实现类命名规则,%s为占位符
gc.setControllerName("%sController");//2.1.8设置controller命名规则,%s为占位符
gc.setXmlName("%sMapper");//2.1.9设置xml命名规则,%s为占位符
gc.setMapperName("%sMapper");//2.1.10设置mapper命名规则,%s为占位符
gc.setEntityName("%s");//2.1.11设置entity命名规则,%s为占位符
gc.setIdType(IdType.AUTO);//2.1.12设置id生成策略,默认值:ASSIGN_ID
mpg.setGlobalConfig(gc);
//2.2包配置(packageConfig)
PackageConfig pc = new PackageConfig();
pc.setParent("com.tang"); //2.2.1设置父包名
pc.setMapper("mapper"); //2.2.2设置mapper接口所在的子包名
pc.setEntity("pojo"); //2.2.3设置entity类所在的子包名
pc.setService("service"); //2.2.4设置service接口所在的子包名
pc.setServiceImpl("service.impl"); //2.2.5设置service实现类所在的子包名
pc.setController("controller"); //2.2.6设置controller所在的子包名
pc.setXml("mapper.xml"); //2.2.7设置xml文件所在的子包名
mpg.setPackageInfo(pc);
//2.3数据库表配置(strategyConfig)
StrategyConfig sc = new StrategyConfig();
sc.setNaming(NamingStrategy.underline_to_camel); //2.3.1设置表名和字段名的命名策略,默认值:下划线转驼峰
sc.setColumnNaming(NamingStrategy.underline_to_camel); //2.3.2设置字段名的命名策略,默认值:下划线转驼峰
sc.setEntityLombokModel(true);//自动lombok
sc.setRestControllerStyle(true); //2.3.3设置restful风格,即返回json格式
sc.setControllerMappingHyphenStyle(true); //2.3.4设置controller中url路径是否使用驼峰命名,默认false
sc.setLogicDeleteFieldName("deleted");//2.3.5设置逻辑删除
sc.setVersionFieldName("version"); //2.3.6设置乐观锁属性名称
sc.setInclude(scanner("表名,多个英文逗号分割").split(",")); //2.3.7设置需要生成的表名
mpg.setStrategy(sc);
// 执行生成:运行代码生成器,根据配置生成相应的Java代码。
mpg.execute();
}
}