mybatis-plus代码生成器

MyBatis-Plus 代码生成器完整解析

1. 代码生成器简介

MyBatis-Plus 代码生成器是一个自动化工具,用于快速生成 实体类(Entity)、Mapper 接口、Service 层、Controller 层 等代码,减少重复开发工作。通过配置数据库连接和代码风格,可一键生成标准化的 CRUD 代码,显著提升开发效率。

官网文档
• 代码生成器使用教程
• 配置项详解


2. 核心配置详解
2.1 数据源配置 (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:数据库账号密码。


2.2 全局配置 (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 为雪花算法)。


2.3 包配置 (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


2.4 策略配置 (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 注解。


3. 代码生成流程
  1. 输入表名:运行 main 方法后,控制台提示输入表名(多个表用逗号分隔)。
  2. 生成代码
    mpg.execute(); // 执行代码生成
    
  3. 生成结果
    • 实体类、Mapper、Service、Controller 代码生成到 src/main/java
    • Mapper XML 文件生成到指定包路径(如 resources/mapper.xml)。

4. 完整代码

        <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();
    }

}

mybatis-plus代码生成器_第1张图片

你可能感兴趣的:(mybatis,adb)