首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >MyBatis-Flex 代码生成实战

MyBatis-Flex 代码生成实战

作者头像
程序员NEO
发布2026-04-29 19:27:25
发布2026-04-29 19:27:25
870
举报
之前的很多项目中,都是使用 MyBatis Plus[1] 作为数据访问层框架,能够通过 Java 快速操作数据库。

这次给大家介绍一个新的数据访问层框架 MyBatis Flex,它的作用和 MyBatis Plus 一样,都是对传统操作数据库的 MyBatis 框架进行增强。它的 3 大优势:

更轻量:MyBatis-Flex 除了 MyBatis 本身,再无任何第三方依赖,因此会带来更高的自主性、把控性和稳定性。在任何一个系统中,依赖越多,稳定性越差。 更灵活:MyBatis-Flex 提供了非常灵活的 QueryWrapper,支持关联查询、多表查询、多主键、逻辑删除、乐观锁更新、数据填充、数据脱敏等等。 更高的性能:MyBatis-Flex 通过独特的架构,没有任何 MyBatis 拦截器、在 SQL 执行的过程中,没有任何的 SQL Parse,因此会带来指数级的性能增长。 官方文档 中提到了和 MyBatis Plus 的功能对比,我认为比较有竞争力的是它 支持多表查询:

功能对比

功能或特点

MyBatis-Flex

MyBatis-Plus

Fluent-MyBatis

对 entity 的基本增删改查

分页查询

分页查询之总量缓存

分页查询无 SQL 解析设计(更轻量,及更高性能)

多表查询: from 多张表

多表查询: left join、inner join 等等

多表查询: union,union all

单主键配置

多种 id 生成策略

支持多主键、复合主键

字段的 typeHandler 配置

除了 MyBatis,无其他第三方依赖(更轻量)

QueryWrapper 是否支持在微服务项目下进行 RPC 传输

未知

逻辑删除

乐观锁

SQL 审计

数据填充

数据脱敏

✔️ (收费)

字段权限

✔️ (收费)

字段加密

✔️ (收费)

字典回写

✔️ (收费)

Db + Row

Entity 监听

多数据源支持

借助其他框架或收费

多数据源是否支持 Spring 的事务管理,比如 @Transactional 和 TransactionTemplate 等

多数据源是否支持 "非Spring" 项目

多租户

动态表名

动态 Schema

以上内容来自第三方相关产品的官方文档或第三方平台,若有错误,欢迎纠正。

此外,在 Mybatis Flex 中,有了一个名称为 mybatis-flex-codegen 的模块,提供了可以通过数据库表,生成代码的功能。当我们把数据库表设计完成后, 就可以使用其快速生成 Entity、Mapper、Service、Controller 代码,能大幅提高我们的开发效率。

使用代码生成器

下面让我们参考 官方文档[2] 使用代码生成器。

1)引入 MyBatis Flex 依赖,注意是 Spring Boot3 的:

代码语言:javascript
复制
<dependency>
    <groupId>com.mybatis-flex</groupId>
    <artifactId>mybatis-flex-spring-boot3-starter</artifactId>
    <version>1.11.0</version>
</dependency>

还需要引入代码生成相关依赖:

代码语言:javascript
复制
<!-- 代码生成模块 -->
<dependency>
    <groupId>com.mybatis-flex</groupId>
    <artifactId>mybatis-flex-codegen</artifactId>
    <version>1.11.0</version>
</dependency>
<!-- 数据库连接池 -->
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
</dependency>

2)编写数据库连接配置:

代码语言:javascript
复制
spring:
  # mysql
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ai_code_mother
    username: root
    password: 123456

3)开发生成器

在根包下新建 generator 包,新建 MyBatisCodeGenerator 类,编写代码生成器。先从官方复制⁢示例代码,然后按需修改即可。

在 Mybatis Flex 的代码生成器中,支持如下 8 种类型的产物生成,只需要⁢关注前 6 个就好:

  • • Entity 实体类 ✅
  • • Mapper 映射类 ✅
  • • Service 服务类 ✅
  • • ServiceImpl 服务实现类 ✅
  • • Controller 控制类 ✅
  • • MapperXml 文件 ✅
  • • TableDef 表定义辅助类
  • • package-info.java 文件

代码如下:

代码语言:javascript
复制
package com.it666.demo.generator;

import cn.hutool.core.lang.Dict;
import cn.hutool.setting.yaml.YamlUtil;
import com.mybatisflex.codegen.Generator;
import com.mybatisflex.codegen.config.GlobalConfig;
import com.zaxxer.hikari.HikariDataSource;

import java.util.Map;

/**
 * @author BNTang
 * @version 1.0
 * @description MyBatis代码生成器
 * @since 2025/10/3 星期五
 **/
public class MyBatisCodeGenerator {

    // 需要生成的表名
    private static final String[] TABLE_NAMES = {"user"};

    public static void main(String[] args) {
        // 获取数据源信息
        Dict dict = YamlUtil.loadByPath("application.yml");

        Map<String, Object> dataSourceConfig = dict.getByPath("spring.datasource");
        String url = String.valueOf(dataSourceConfig.get("url"));
        String username = String.valueOf(dataSourceConfig.get("username"));
        String password = String.valueOf(dataSourceConfig.get("password"));

        // 配置数据源
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setJdbcUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);

        // 创建配置内容
        GlobalConfig globalConfig = createGlobalConfig();

        // 通过 datasource 和 globalConfig 创建代码生成器
        Generator generator = new Generator(dataSource, globalConfig);

        // 生成代码
        generator.generate();
    }

    // 详细配置见:https://mybatis-flex.com/zh/others/codegen.html
    public static GlobalConfig createGlobalConfig() {
        // 创建配置内容
        GlobalConfig globalConfig = new GlobalConfig();

        // 设置根包,建议先生成到一个临时目录下,生成代码后,再移动到项目目录下
        globalConfig
                .getPackageConfig()
                .setBasePackage("com.it666.demo.genresult");

        // 设置表前缀和只生成哪些表,setGenerateTable 未配置时,生成所有表
        globalConfig
                .getStrategyConfig()
                .setGenerateTable(TABLE_NAMES)
                // 设置逻辑删除的默认字段名称
                .setLogicDeleteColumn("isDelete");

        // 设置生成 entity 并启用 Lombok
        globalConfig
                .enableEntity()
                .setWithLombok(true)
                .setJdkVersion(21);

        // 设置生成 mapper
        globalConfig.enableMapper();
        globalConfig.enableMapperXml();

        // 设置生成 service
        globalConfig.enableService();
        globalConfig.enableServiceImpl();

        // 设置生成 controller
        globalConfig.enableController();

        // 设置生成时间和字符串为空,避免多余的代码改动
        globalConfig
                .getJavadocConfig()
                .setAuthor("<a href=\"https://github.com/BNTang\">程序员NEO</a>")
                .setSince("");
        return globalConfig;
    }
}

上述代码中,从配置文件中获取数据库连接信息,用来初始化数据源。然后自定义了一些⁢生成配置,包括:

  • • 指定逻辑删除字段
  • • 使用的 JDK 版本
  • • 生成的代码放到哪个包(建议选择一个独立的包,不要跟老代码混一起)
  • • 要生成哪些文件
  • • 生成什么代码注释

4)执行代码生成器,查看生成的结果。如图:

将生成的代码文件移动到对应的包下,移动后:

5)主类添加扫描 Mapper 文件的注解:

代码语言:javascript
复制
@MapperScan("com.it666.demo.mapper")

然后就可以启动项目,验证生成代码的效果了。

引用链接

[1] MyBatis Plus: https://baomidou.com [2] 官方文档: https://mybatis-flex.com/zh/others/codegen.html

如果这篇文章帮到了你,不妨点个分享给同样需要的朋友吧! 你的每一次支持,都是我持续创作的动力!💪

往期推荐:

序号

文章标题

链接

1

MCP协议爆火揭秘

查看详情

2

轻松配置Cursor玩转MCP

查看详情

3

Browser-Tool 前端开发神器

查看详情

4

AI编码焕新:用Context7

查看详情

5

NotebookLM:靠谱知识库

查看详情

6

Spring AI 玩转多轮对话

查看详情

7

Cursor生成UI,加一步封神

查看详情

8

神器!免费替代Postman

查看详情

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-10-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员NEO 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 功能对比
  • 使用代码生成器
    • 引用链接
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档