解放双手!MyBatis-Plus代码生成器3分钟上手指南

解放双手!MyBatis-Plus代码生成器3分钟上手指南

【免费下载链接】mybatis-plus An powerful enhanced toolkit of MyBatis for simplify development 【免费下载链接】mybatis-plus 项目地址: https://gitcode.com/gh_mirrors/my/mybatis-plus

你还在手动编写CRUD代码吗?还在为实体类与数据库表字段不匹配而烦恼吗?MyBatis-Plus代码生成器(Code Generator)让这一切成为历史!本文将带你快速掌握这个自动化开发利器,从配置到生成只需3步,让你专注于业务逻辑而非重复劳动。

为什么选择代码生成器?

传统开发中,我们需要为每个数据库表手动创建实体类(Entity)、数据访问接口(Mapper)、服务层(Service)和控制器(Controller),不仅耗时费力,还容易出错。MyBatis-Plus代码生成器通过读取数据库表结构,自动生成标准代码,支持多种模板引擎,可高度自定义输出内容。

代码生成流程

核心优势:

  • 零重复劳动:自动生成全套CRUD代码
  • 多模板支持:Velocity、Freemarker、Beetl等多种模板引擎
  • 高度可配置:支持自定义模板、文件路径、代码风格
  • 无缝集成:与MyBatis-Plus核心功能深度整合

核心架构解析

代码生成器的核心实现位于mybatis-plus-generator模块,主要由模板引擎抽象类和具体实现类组成。

模板引擎架构

抽象模板引擎类AbstractTemplateEngine定义了代码生成的核心流程,包括初始化配置、输出各类文件(实体、Mapper、Service等)和模板渲染等方法:

mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/engine/AbstractTemplateEngine.java

主要方法:

  • init():初始化配置构建器
  • batchOutput():批量输出所有文件
  • outputEntity()/outputMapper()/outputService()/outputController():输出各类文件
  • getObjectMap():构建模板渲染所需的数据模型

具体模板引擎实现类如VelocityTemplateEngine则负责实际的模板渲染工作:

mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/engine/VelocityTemplateEngine.java

快速上手步骤

步骤1:添加依赖

在项目的构建文件中添加MyBatis-Plus代码生成器依赖。以Maven为例:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>最新版本</version>
</dependency>
<!-- 模板引擎依赖,选择一个即可 -->
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.3</version>
</dependency>

步骤2:编写配置类

创建代码生成器配置类,设置数据源、全局配置、包配置、策略配置等:

public class CodeGenerator {
    public static void main(String[] args) {
        // 1. 创建代码生成器
        AutoGenerator mpg = new AutoGenerator();
        
        // 2. 全局配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath + "/src/main/java");
        gc.setAuthor("your name"); // 作者
        gc.setOpen(false); // 生成后是否打开文件夹
        gc.setServiceName("%sService"); // 去掉Service接口的"I"前缀
        mpg.setGlobalConfig(gc);
        
        // 3. 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("password");
        mpg.setDataSource(dsc);
        
        // 4. 包配置
        PackageConfig pc = new PackageConfig();
        pc.setModuleName("demo"); // 模块名
        pc.setParent("com.example"); // 父包名
        mpg.setPackageInfo(pc);
        
        // 5. 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setInclude("user", "order"); // 需要生成的表名
        strategy.setNaming(NamingStrategy.underline_to_camel); // 数据库表映射到实体的命名策略
        strategy.setColumnNaming(NamingStrategy.underline_to_camel); // 数据库表字段映射到实体的命名策略
        strategy.setEntityLombokModel(true); // 实体类使用Lombok注解
        strategy.setRestControllerStyle(true); // 生成@RestController控制器
        mpg.setStrategy(strategy);
        
        // 6. 执行生成
        mpg.execute();
    }
}

步骤3:自定义模板(可选)

如果默认生成的代码不符合需求,可以自定义模板。例如,自定义实体类模板:

  1. 创建自定义模板文件(如entity.java.vm
  2. 在配置中指定自定义模板路径:
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setEntity("templates/entity.java.vm"); // 自定义实体模板
mpg.setTemplate(templateConfig);

高级配置技巧

多模板引擎切换

代码生成器支持多种模板引擎,只需更换对应的依赖和配置即可:

// 使用Freemarker模板引擎
mpg.setTemplateEngine(new FreemarkerTemplateEngine());

// 使用Beetl模板引擎
mpg.setTemplateEngine(new BeetlTemplateEngine());

各模板引擎实现类:

自定义文件输出路径

通过InjectionConfig可以自定义文件输出路径和内容:

InjectionConfig cfg = new InjectionConfig() {
    @Override
    public void initMap() {
        // 自定义配置
        Map<String, Object> map = new HashMap<>();
        map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
        this.setMap(map);
    }
};

// 自定义输出配置
List<FileOutConfig> focList = new ArrayList<>();
focList.add(new FileOutConfig("/templates/mapper.xml.vm") {
    @Override
    public String outputFile(TableInfo tableInfo) {
        // 自定义Mapper XML文件输出路径
        return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()
            + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
    }
});
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);

常见问题解决

中文乱码问题

确保模板引擎配置了正确的编码,以Velocity为例:

mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/engine/VelocityTemplateEngine.java

p.setProperty(Velocity.ENCODING_DEFAULT, ConstVal.UTF8);
p.setProperty(Velocity.INPUT_ENCODING, ConstVal.UTF8);

模板加载失败

检查模板路径配置是否正确,确保模板文件存在。默认模板位于:

mybatis-plus-generator/src/main/resources/templates/

代码风格不符合团队规范

通过自定义模板和策略配置调整代码风格,例如:

  • 设置strategy.setEntityColumnConstant(true)生成字段常量
  • 设置strategy.setControllerMappingHyphenStyle(true)生成连字符风格的URL
  • 设置strategy.setTablePrefix("t_")忽略表前缀

实战案例

以下是使用代码生成器生成的User实体类示例:

package com.example.demo.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * <p>
 * 用户表
 * </p>
 *
 * @author your name
 * @since 2025-10-06
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 用户名
     */
    @TableField("username")
    private String username;

    /**
     * 密码
     */
    @TableField("password")
    private String password;

    /**
     * 邮箱
     */
    @TableField("email")
    private String email;

    /**
     * 年龄
     */
    @TableField("age")
    private Integer age;


}

生成的Mapper接口:

package com.example.demo.mapper;

import com.example.demo.entity.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

/**
 * <p>
 * 用户表 Mapper 接口
 * </p>
 *
 * @author your name
 * @since 2025-10-06
 */
public interface UserMapper extends BaseMapper<User> {

}

总结与展望

MyBatis-Plus代码生成器通过自动化代码生成,极大地提高了开发效率,减少了重复劳动。其灵活的配置和强大的模板引擎支持,使其能够适应各种项目需求。

随着项目的发展,代码生成器将支持更多模板引擎和更丰富的自定义选项,进一步提升开发体验。如果你还没有尝试过这个强大的工具,现在就动手试试吧!

官方文档:README.md 完整示例:mybatis-plus-generator/src/test/java/com/baomidou/demo/

提示:代码生成器源码位于mybatis-plus-generator/目录,感兴趣的同学可以深入研究其实现原理,定制更符合自己需求的代码生成逻辑。

【免费下载链接】mybatis-plus An powerful enhanced toolkit of MyBatis for simplify development 【免费下载链接】mybatis-plus 项目地址: https://gitcode.com/gh_mirrors/my/mybatis-plus

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值