mybatisx生成代码(保姆级教程)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

在 Java 开发领域,数据库操作是应用程序的核心功能之一。然而,传统的手动编写 SQL 语句、实体类和 DAO 层代码的方式,不仅耗时耗力,还容易引入重复劳动和错误。此时,MyBatisX 生成代码的工具便应运而生。它通过自动化的方式,将数据库表结构与代码生成相结合,极大提升了开发效率。无论是编程初学者还是中级开发者,掌握这一工具都能显著降低工作量,并快速构建符合规范的代码结构。本文将从基础到进阶,系统讲解 MyBatisX 的使用方法,并通过实际案例展示其核心价值。


MyBatisX 是什么?

MyBatisX 是一个基于 MyBatis 生态的代码生成工具,它通过解析数据库表结构,自动生成实体类、Mapper 接口、XML 配置文件以及对应的测试代码。其核心目标是 “以数据库为中心,自动生成符合业务需求的代码”

可以将其想象为一座桥梁:数据库是仓库,代码是货架上的商品,而 MyBatisX 则是自动化生产线,它根据仓库的库存清单(表结构)自动生产出整齐排列的商品(代码文件)。开发者无需手动编写基础代码,只需专注于业务逻辑的实现。


环境准备与快速入门

1. 安装 MyBatisX

要使用 MyBatisX,首先需要在项目的 pom.xml 文件中添加依赖:

<dependency>  
    <groupId>com.baomidou</groupId>  
    <artifactId>mybatis-plus-generator</artifactId>  
    <version>3.6.1</version>  
</dependency>  

2. 配置数据库连接

创建一个配置类 GeneratorConfig,设置数据库连接信息和生成规则:

public class GeneratorConfig {  
    public static void main(String[] args) {  
        // 创建代码生成器  
        AutoGenerator mpg = new AutoGenerator();  

        // 数据源配置  
        DataSourceConfig dsc = new DataSourceConfig();  
        dsc.setUrl("jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8");  
        dsc.setUsername("root");  
        dsc.setPassword("123456");  
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");  

        mpg.setDataSource(dsc);  

        // 其他配置(如包路径、输出目录等)  
        ...  
    }  
}  

3. 生成代码

运行 GeneratorConfigmain 方法后,MyBatisX 会自动扫描指定数据库中的表,并生成对应的代码文件。默认生成的文件包括:

  • 实体类(如 User.java
  • Mapper 接口(如 UserMapper.java
  • XML 文件(如 UserMapper.xml

MyBatisX 的核心功能详解

1. 实体类生成

实体类是 MyBatisX 的核心输出之一。它会根据数据库表的字段类型、注释等信息,自动生成对应的 Java 类。例如,表 user 中的字段 user_name 和注释 "用户姓名",会生成以下代码:

@Data  
public class User {  
    @TableId(value = "id", type = IdType.AUTO)  
    private Long id;  

    @TableField("user_name")  
    @TableComment("用户姓名")  
    private String userName;  
    ...  
}  

其中,@TableId@TableField 是 MyBatis-Plus 提供的注解,用于标识主键和字段映射关系。

2. Mapper 接口与 XML 生成

MyBatisX 会为每个表生成对应的 Mapper 接口,例如:

public interface UserMapper extends BaseMapper<User> {  
    // 可手动添加自定义方法  
}  

同时,XML 文件会自动生成基础的 CRUD(增删改查)语句,如:

<select id="selectById" resultType="com.example.User">  
    SELECT * FROM user WHERE id = #{id}  
</select>  

3. 高级配置选项

MyBatisX 提供了丰富的配置选项,例如:

  • 表过滤:通过 TableName 类型的 TableFilter 接口,可指定生成特定表(如 user, order)。
  • 命名规则:通过 GlobalConfigNamingStrategy 属性,可将数据库的下划线命名(user_name)转换为驼峰命名(userName)。
  • 模板自定义:通过修改模板文件,可调整生成的代码格式(如缩进、注释风格)。

实际案例:生成电商系统的订单模块

案例背景

假设我们有一个电商系统的数据库,包含 orders 表,其结构如下:

字段名类型注释
order_idBIGINT主键,自增
user_idBIGINT用户 ID
order_amountDECIMAL(10,2)订单金额
create_timeDATETIME创建时间

步骤 1:配置生成规则

GeneratorConfig 中设置:

// 全局配置  
GlobalConfig gc = new GlobalConfig();  
gc.setOutputDir("src/main/java");  
gc.setAuthor("Developer");  
gc.setOpen(false); // 生成后不打开文件夹  

// 包配置  
PackageConfig pc = new PackageConfig();  
pc.setParent("com.example");  
pc.setEntity("entity");  
pc.setMapper("mapper");  
pc.setXml("mapper.xml");  

mpg.setGlobalConfig(gc);  
mpg.setPackageInfo(pc);  

步骤 2:执行生成

运行代码后,目录结构会自动生成:

src/main/java/com/example  
├── entity/  
│   └── Order.java  
├── mapper/  
│   └── OrderMapper.java  
└── mapper/xml/  
    └── OrderMapper.xml  

步骤 3:验证生成结果

查看 Order.java,确认字段映射是否正确:

public class Order {  
    private Long orderId;  
    private Long userId;  
    private BigDecimal orderAmount;  
    private LocalDateTime createTime;  
    ...  
}  

OrderMapper.xml 中的 SQL 语句会包含 insert, select, update, delete 等基础操作。


常见问题与优化技巧

1. 字段类型不匹配

如果数据库字段类型与 Java 类型不匹配(如 DECIMAL 对应 BigDecimal),MyBatisX 会默认生成合适的类型。若需自定义,可通过 FieldStrategy 配置:

// 在 GlobalConfig 中设置  
gc.setFieldStrategy(FieldStrategy.NOT_NULL); // 忽略空字段  

2. 排除特定字段

若某字段(如 create_time)需要使用 MyBatis 的 @TableField 注解指定填充策略:

@TableField(fill = FieldFill.INSERT)  
private LocalDateTime createTime;  

此时可在配置中通过 TableFill 排除该字段的自动填充:

List<TableFill> tableFillList = new ArrayList<>();  
tableFillList.add(new TableFill("create_time", FieldFill.INSERT));  

3. 性能优化

对于大数据量的表,生成 XML 文件时可能因 SQL 语句过长导致性能问题。此时可开启 simpleMode

// 在 InjectionConfig 中配置  
gc.setSimpleMode(true); // 简化 XML 文件内容  

进阶用法:自定义模板

MyBatisX 允许通过 Freemarker 模板自定义生成的代码结构。例如,修改 entity.java 模板文件,添加注释:

/**  
 * @author ${author}  
 * @date ${date}  
 */  
public class ${entity} {  
    // 字段定义  
}  

通过这种方式,可以统一代码风格,或嵌入业务特定的注释。


总结与展望

通过本文的讲解,读者应已掌握 MyBatisX 生成代码 的核心流程与技巧。从快速入门到进阶配置,MyBatisX 能显著减少重复性工作,让开发者聚焦于业务逻辑的实现。未来,随着工具的迭代,其功能将更加完善,例如支持更多数据库类型、提供更智能的代码优化策略。

对于初学者,建议从简单案例开始,逐步探索高级配置;对于中级开发者,则可结合实际项目需求,定制化模板与规则。记住,工具的终极目标是提升效率,而非替代思考——合理利用 MyBatisX,将助你更快、更优雅地构建高质量的 Java 应用。

最新发布